1

List という名前のクラスがあり、このクラスには静的メソッドがあります。私が電話するとき:

List::method();

次のエラーが発生します。

syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting '('

PHP は、ネイティブ関数 list() を呼び出したいと考えていますか? クラスの名前を変更する必要がありますか?

4

2 に答える 2

2

はいといいえ。listは関数ではなく、言語構造です。そのため、これは「予約語」であり、コンパイル中にトークナイザーによって異なる方法で処理されることを意味します。

コンパイラは、listトークンが言語構造のように続くことを期待しているため、 a(が報告されます。代わりに、スコープ演算子を与えているため、混乱します。最も簡単な解決策は、クラスの名前を変更するか (いずれにせよ過度に一般的です)、クラスListを独自の名前空間に配置するか、明示的にグローバル名前空間を参照して、名前空間の競合を防ぐことです。

\List::method();

これは、PHP 5.3 以降でも同様に機能するはずです。これは、バックスラッシュの後にクラス名が自動的に期待されるグローバル名前空間を調べるようにコンパイラに指示します。

于 2013-05-26T19:02:16.433 に答える
1

はい、PHP はネイティブ関数
T_PAAMAYIM_NEKUDOTAYIM を呼び出そうとしますが、これは予期しない二重コロンを意味するため、クラスの名前を変更するとすべて問題ないはずです

于 2013-05-26T19:01:36.973 に答える