3

PHP関数で静的スコープを操作するときに次の例を取得しました。

function testStatic() {
static $a;
echo "here is a first time: ".$a."<br />";
$a = 23;
static $a = 100;
echo "here is a second time: ".$a."<br />";
}

この関数をこのように実行すると

teststatic(); echo "<hr />";
teststatic();

以下の結果を出力します。

ここにあります:100
ここにあります:23


ここにあります:23
ここにあります:23

しかし、私はそれが次のようになることを期待しています:

ここに:null
ここに:100


ここにa:100
ここに:100

私は何時間も上記の結果を受け取った理由を説明しようと考えていましたが、実際には失敗しました。上記の結果が得られた理由を教えてください。ありがとうございました!

4

1 に答える 1

1

あなたが示す出力が実際にそのコードの出力であるとは信じがたいです。しかし、ここで問題は明らかです。

static変数は関数またはクラスにバインドされ、staticキーワードを介して宣言されます。あなたは再宣言してい$aます; これは(私が推測する)警告を発するはずです。

プロパティは関数またはクラスの定義の一部であるためstatic、(明らかに)最後に出現したものが問題の関数/クラスに「アタッチ」されます。

関数が最初に呼び出されたときにのみ、$a値が割り当てられます23。最初のechoステートメントの後。

これは2段階のプロセスであり、最初にパーサーがstaticプロパティを含む関数の定義を読み取ります。その後、コードが実行され、プロパティが変更されます。

于 2012-08-27T16:41:24.370 に答える