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;
bannerAds