2

グローバル コンテキストとクラス コンテキストの間で変数の代入の扱いが異なる理由がわかりません。

$var1 = "a" . "b"; # PHP syntax o.k.

class myClass {
    private $var2 = "a" . "b"; # PHP Parse error:  syntax error, unexpected '.', expecting ',' or ';'
}

PS: プロパティ (プライベート/保護/パブリック) の可視性は役割を果たしません。

4

2 に答える 2

5

「クラスコンテキストでの変数の割り当て」ではありません。クラスのプロパティprivate $varを宣言し、さらにデフォルト値を指定しています。ここでクラスの構造を宣言していますが、これは手続き型コードでの変数の代入とは異なります。クラス構造はパーサーによって解析され、コンパイラによってコンパイルされ、プロパティのデフォルト値はこの解析/コンパイル ステップで確立されます。コンパイラは手続き型コードを実行しません。定数値のみを処理できます。

そのため、クラスの宣言を処理する PHP の部分であるパー​​サー/コンパイラーは を評価しないため、評価が必要なデフォルト値でクラス プロパティを宣言することはできません。

于 2013-05-09T08:56:50.817 に答える
3

PHPドキュメントからの引用(私の強調)

この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。

代わりに、値が評価に依存している場合は、コンストラクターで値を定義します。

于 2013-05-09T08:54:35.763 に答える