List という名前のクラスがあり、このクラスには静的メソッドがあります。私が電話するとき:
List::method();
次のエラーが発生します。
syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting '('
PHP は、ネイティブ関数 list() を呼び出したいと考えていますか? クラスの名前を変更する必要がありますか?
はいといいえ。list
は関数ではなく、言語構造です。そのため、これは「予約語」であり、コンパイル中にトークナイザーによって異なる方法で処理されることを意味します。
コンパイラは、list
トークンが言語構造のように続くことを期待しているため、 a(
が報告されます。代わりに、スコープ演算子を与えているため、混乱します。最も簡単な解決策は、クラスの名前を変更するか (いずれにせよ過度に一般的です)、クラスList
を独自の名前空間に配置するか、明示的にグローバル名前空間を参照して、名前空間の競合を防ぐことです。
\List::method();
これは、PHP 5.3 以降でも同様に機能するはずです。これは、バックスラッシュの後にクラス名が自動的に期待されるグローバル名前空間を調べるようにコンパイラに指示します。
はい、PHP はネイティブ関数
T_PAAMAYIM_NEKUDOTAYIM を呼び出そうとしますが、これは予期しない二重コロンを意味するため、クラスの名前を変更するとすべて問題ないはずです