PHPはT_PAAMAYIM_NEKUDOTAYIMを期待していますか?


542

誰か持っていT_PAAMAYIM_NEKUDOTAYIMますか?


22
時々これは$記号がないことを知らせるPHPの方法です...たとえば、$ _ SESSION ["foo"]ではなく_SESSION ["foo"]と書いた場合
Gonzo

131
二重二重コロンのヘブライ語ですが、... bugs.php.net/bug.php?id=14492を参照してください:「ところで、解析エラーにスペルミスがあります。形式は、元の名詞+ 'ayim'接尾辞であり、 'nekuda'は単一形式です( 'nekudot'は複数形です)。
Wolfgang Fahl、2012年

66
@WolfgangFahl私はそのエラーについて何かが間違っているようだと知っていました。
Peter Turner

14
@WolfgangFahlスペルミスは欠けているだけuです。それはあるはずですT_PAAMAYIM_NEKUDOTAYIM。(PAAMAYIM= "twice"、NEKUDOTAYIM= := "נקודותיים")
Tom

15
このエラーを見たとき、私はちょうど30秒間画面にぶつかったのをじっと見つめた後、笑い出した後、タバコを吸いに行きました:F 1+
n00b

回答:


342

これは二重コロン演算子です::パーサートークンのリストを参照)。


11
あんまり。これをテストしてくださいvar_dump(empty(TRUE))
machineaddict

1
@machineaddict間違った質問/回答?
ガンボ2014年

2
いいえ。同じT_PAAMAYIM_NEKUDOTAYIMを返す評価を追加しました。間違って見つけました。
machineaddict、2014年

6
@Web_Developerが発生する理由は、構文的に有効なステートメントのforeach($cats as cat後に受け入れ可能な唯一の文字catがある::場合、と呼ばれるクラスの静的プロパティを指定できるためですcat。場合などは、catクラスと呼ばれるパブリック静的メンバを持って$mouse、その後、foreach($cats as cat::$mouse)完全に有効ですphpが、以外との声明::の後には、cat構文エラーになります。$mouse宣言されたプロパティでない場合cat、致命的なエラーが発生しますが、構文エラーは発生しません。
chiliNUT

2
var_dump(empty(TRUE))、PHP 7.2でbool(false)を返すだけ
プログラマーDancuk

109

グーグルは不思議に働く。

「ダブルコロン」のヘブライ語です。


3
@MattiVirkkunen任意の言語でエラー、コミット、構文を受け入れる新しい言語はどうですか?:)私たちはそれを行うことができます。
Hector

2
Googleが私をここに連れてきました。
Sumit

2
israelisがphpを書いた:)
sd1sd1

@ sd1sd1、そうですね、おそらくそれを書いたのはZeevでしょう
peterchaula

53

これ::は、PHP での演算子の名前です。文字通り「ダブルコロン」を意味します。何らかの理由で、彼らはヘブライ語でそれを命名しました。コードの構文を確認し、::適切な場所に配置してください:-)


1
関数は英語ですが、そのエラーはヘブライ語にあります。他のエラーがヘブライ語にあるかどうかはわかりません。
アレックス

19
ハイライト文字列はלהדגישמחרוזתです。今後はもちろん、カスタムのarray_push関数לדחוף_מערךをヘブライ文字でのみ使用します。ヘブライ語を話さない私の同僚全員がきっと気に入るはずです。私たちの開発チームのほぼすべてが、非ラテン文字で書かれた少なくとも1つの言語を話します。楽しいはずです:)
アイザック

3
それがヘブライ語にある理由は、コードがイスラエル人によって書かれたからです。私は彼らがそのエラーを見逃したとは思わない、彼らはそれを覚え書きとして翻訳せずにそこに残した。
ラウル

5
@Raul Ok、次のプロジェクトでは、エラーコードをイタリア語で書きます。私はイタリア人です。あなたは何を期待していますか?:-)
ジャンルカゲッティーニ2015年

@Ilya Birmanそれは文字通り「二重コロン」を意味するのではありません。文字通り「2回、2つのドット」を意味します
Sapphire_Brick

47

ウィキペディアから:

PHPでは、スコープ解決演算子はPaamayim Nekudotayim(ヘブライ語:פעמייםנקודתיים)とも呼ばれ、ヘブライ語では「ダブルコロン」を意味します。

「Paamayim Nekudotayim」という名前は、PHP 3で使用されているイスラエルで開発されたZend Engine 0.5で導入されました。ヘブライ語を話さない多くの開発者を混乱させてきましたが、このサンプルエラーメッセージのように、PHP 5ではまだ使用されています。 :

$ php -r ::解析エラー:構文エラー、予期しないT_PAAMAYIM_NEKUDOTAYIM

PHP 5.4以降、スコープ解決演算子に関するエラーメッセージにはこの名前がまだ含まれていますが、その意味は多少明確になっています。

$ php -r ::解析エラー:構文エラー、予期しない '::'(T_PAAMAYIM_NEKUDOTAYIM)

公式PHPのドキュメント

スコープ解決演算子(Paamayim Nekudotayimとも呼ばれます)または簡単に言えば、ダブルコロンは、クラスの静的、定数、およびオーバーライドされたプロパティまたはメソッドへのアクセスを許可するトークンです。

これらの項目をクラス定義の外部から参照する場合は、クラスの名前を使用します。

PHP 5.3.0以降では、変数を使用してクラスを参照することが可能です。変数の値をキーワードにすることはできません(例:自己、親、静的)。

Paamayim Nekudotayimは、最初はダブルコロンの名前を付けるのに奇妙な選択のように見えます。ただし、Zend Engine 0.5(これはPHP 3に対応しています)を作成しているときに、それをZendチームがそれと呼ぶことにしました。それは実際には二重コロンを意味します-ヘブライ語で!


1
実は口語的なヘブライ語です。ウィキペディアは現在、「PHPでは、スコープ解決演算子はPaamayim Nekudotayim(ヘブライ語:פעמייםנקודותיים、発音は[paʔaˈmajim nəkudoˈtajim]、2番目の単語はofの口語的な破損、[nəkudaˈtajim]と発音)、つまり「二重コロン」を意味します。 「ヘブライ語で」
マイク

11

これは、PHPで定数をempty()関数に適用するときにも発生します。

if (!empty(SOME_CONSTANT)) {

}

それは私の場合でした。私はこれを使って解決しました:

$string = SOME_CONSTANT;
if (!empty($string)) {

}

2
定数が空になるのはなぜですか?
パニックにならないでください。

1
いい質問:これは、たとえば、このエラー状況で他の誰かが取得した場合の例ですが、それも可能であることを示しています:)
Max

6
@パニックにならないでください:なぜいけないのですか?empty()は、変数が存在するかどうかだけでなく、その値が「空」かどうかもテストします(PHPの場合、ゼロ(0)も空です)。このような定数は、ユーザーが変更することを意図した値を表す可能性があります-DB設定や、trueまたはfalseの値、およびコード開発者が設計時に知らないその他の値のタイプなど。これは、APIまたはコードフレームワークに共通です。Zendパーサーの開発者が誰もが知っていて理解している一般的な単語ではなく、いくつかのヘブライ語を使用しなかった理由を理解できません。というか、面白くもないです。
StanE 2015年

私は構成ファイルで定数を使用しており、特定の定数が空(null、false、0、空の文字列、空の配列...)かどうかをコードで知りたいです。すべて手動でテストする必要がありますか?WTF
qdev

5

私はヘブライ語をよく知っているので、「Paamayim Nekudotayim」という名前を明確にするために、言い換えると「ダブルコロン」ですが、文字どおりに翻訳されています。

  • 「Paamayim」は「2」または「2回」を意味します
  • 「Nekudotayim」は「ドット」(lit.「holes」)を意味します
    • ヘブライ語では、ネクダはドットを意味します。
    • 複数形はnekudotです。つまり、英語では母音のように機能するドットです。
    • それがNekudotayimと呼ばれる理由は、接尾辞「-ayim」も「2」または「2回」を意味するためですが、通常は2つのアクションではなく2つのオブジェクトを意味するため、::「2倍、2つのドット」以上を意味します。スコープ解決演算子として一般に知られています。

2

これは、以下を使用する場合にforeachsで発生します。

foreach( $array as $key = $value )

の代わりに

foreach( $array as $key => $value )

1

私にとってこれはクラス関数内で起こりました。

PHP 5.3以降で$this::$defaultsは問題なく動作しました。なんらかの理由でバージョン番号が低いサーバーにコードをスワップすると、このエラーが発生しました。

私の場合、解決策self$this次の代わりにキーワードを使用することでした:

self::$defaults 正常に動作します。


彼はなかった尋ねる程度$this、またはに何が起こったかあなた
Sapphire_Brick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.