1

背景: 同じプロジェクトの別の部分で再利用したい静的関数を持つ既存のクラスがあります。静的関数は$_GETなどを使用します。

これが不可解なコードです。まず、クラス:

<?php

// ./fakeapi/fakeapi.php

class FakeAPI {

    static public function test (){

        $var = '_GET';
        ${$var}['newVar'] = '123';
        print_r($_GET);

    }
}

そして、それを必要とするファイル:

<?php

require_once 'fakeapi/fakeapi.php';

FakeAPI::test();

$var = '_GET';
${$var}['newVar'] = '123';
print_r($_GET);

プリント:

Array
(
)
Array
(
    [newVar] => 123
)

...そして、私には理由がわかりません。$_GET['newVar'] = '123';クラス関数で設定すると機能するため、スコープの問題ではありません。ここで何が起こっているか知っている人はいますか?

4

1 に答える 1

0

PHPマニュアルの変数変数によると

警告

変数変数は、関数またはクラス メソッド内の PHP のスーパーグローバル配列では使用できないことに注意してください。変数 $this は、動的に参照できない特殊な変数でもあります。

于 2013-07-21T00:39:39.653 に答える