PHP变量的作用域
PHP变量的作用域
首先
因为写了PHP7的try catch结构时,我觉得对变量的作用域还没有理解,所以为了加深理解,我整理了一下。此外,关于PHP变量作用域的内容,还有很多文章,我会为了自己的记录而做一些描述。
在try catch语句的变量作用域中有疑问
我不理解的是以下描述。在TestA和TestB之间的一个不同点是最后一行处于try catch之前是否声明了echo $test。
由于在try catch之前没有声明,所以我认为TestA.php是否能正常运行。我认为$test在try块中被声明,因此在块的外部无法访问。
答案是可以工作的。原因将在后文中解释。
<?php
try {
$test = 'test';
} catch(Exception $e) {
// 何かしらの処理
}
echo $test;
<?php
$test = ''; // 変数宣言をtryブロック外でしている
try {
$test = 'test';
} catch(Exception $e) {
// 何かしらの処理
}
echo $test;
PHP的作用域和变量类型
理解”作用域”的概念,它指定了一个有效范围,变量类型会通过不同的组合来确定其有效范围。
PHP的作用域有两种类型。
-
ローカルスコープ
関数の中でのみ有効
グローバルスコープ
関数の外でのみ有効(*関数の引数で渡すまたはglobal宣言を使うと関数内でアクセス可能)
PHP的变量有四种类型。
-
ローカル変数
ローカルスコープの変数
グローバル変数
グローバルスコープの変数
スーパーグローバル変数
ローカルスコープとグローバルスコープの両方をもつスコープ(つまりどこからでもアクセスすることができる)
$GROBALSなど
スタティック変数
ローカルスコープで、その値はグローバルスコープと同様にずっと保持される
初期化は1回しかされない
在PHP中,在块内声明的变量即使离开了该块也仍然有效。
在了解了上述范围和变量类型后,关于通过try catch语法来访问testA.php中的$test变量是否可行,它取决于在代码块内声明的变量是否成为全局变量。因此,即使在try块后的代码中也可以访问它。变量是在函数内定义的还是外部定义的是判断作用域的依据。
我对此的感受
因为我对基本的范围理解不够,所以我觉得我是凭感觉写的,请继续删除其他部分。。。
请记住以下代码是不必要的。
<?php
$test = '';
try {
$test = 'test';
} catch(Exception $e) {
// 何かしらの処理
}
echo $test;