PHP で使う => や -> や :: が何という名前かを手っ取り早く調べる方法

先日こんなことを言ったんだけど

PHP のソースコードを読みやすくするための工夫あれこれ – 頭ん中

配列のキーと値を結ぶやつ、何て呼ぶのか知りませんけど =>

=>->:: の名前について一応の解決がついたので書いておきます。

パーサエラーが教えてくれる

例えばあるはずのないところに else があったりすると PHP はこういうエラーを返してきます。

Parse error: syntax error, unexpected T_ELSE in Command line code on line 1

この T_ELSE というのは「パーサトークン」というやつで、PHP 内部でつけられている名前ですね。T は Token の T かな。

else にはそのまま ELSE という名前がついているけど、じゃあ記号を使った部分はどうなっているのか、無理矢理エラーを発生させればわかるはず。

エラーを起こしてみる

こんなファイルを作って実行してもいいし

<?php
=>

コマンドラインから直接たたいてもいいし

% php -r '=>'

対話モードから入力してもいいんだけど

% php -a
Interactive shell

php >

とにかく => でパースエラーを起こしてみましょう。

=>

配列のキーと値を関連づけるのに使う =>

PHP Parse error: syntax error, unexpected T_DOUBLE_ARROW in Command line code on line 1

Double Arrow でした。二重線のついた矢印だからダブルアローか。

->

プロパティや定数、メソッドにアクセスするのに使う -> は「アロー演算子」と呼ばれていることも多いみたいだけど、少なくとも php.net のマニュアルではどこにも「アロー演算子」という言葉は出てきません。

PHP 内部でつけられている名前は

PHP Parse error: syntax error, unexpected T_OBJECT_OPERATOR in Command line code on line 1

Object Operator でした。「オブジェクト演算子」ですかね。

少なくとも「そういう名前がつけられている」のは確かなんだけど、これはあくまで「中ではそういう名前で処理されている」というだけで、それがそのまま「そういう名前である」と言えるかどうかについては議論の余地があるかもしれませんね。

ということで、内部でつけられている名前は Object Operator だけれども「自分の中ではアロー演算子」と思って使うのは自由だし<、その場にいる人が「アロー演算子」と呼ぶことに同意するのであればもう「アロー演算子」でいいんじゃないかという気もします。

::

これは php.net のマニュアルには「スコープ定義演算子」 (英語版では “Scope Resolution Operator“) と書かれてます。

もっと簡単に「ダブルコロン」でもいいんだけど、パーサトークンを出してみたら

PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in Command line code on line 1

え?

Paamayim Nekudotayim だそうです。読めん。

なぜこういう名前かというと

PHP: スコープ定義演算子 (::) – Manual

なぜダブルコロンに Paamayim Nekudotayim という名前をつけたのか、 ちょっと奇妙に感じられるかもしれません。 しかし、Zend Engine 0.5 (PHP 3のエンジン) を 書いている時に、Zend チームはこう呼ぶと決めたのです。 この奇妙な名前は、実はダブルコロンを意味するヘブライ語なのです!

とのこと。理由の説明にはなってない。

ちょっとヘブライ語の発音には疎いんだけど、探してみたらありました。

関係ないけど Forvo 便利ですね。世界中の言葉をネイティブスピーカーの発音で聞かせてくれるサービス。この時にもお世話になりました。

わかったこと

内部でつけられている名前が一般的に通用するとは限らない。

関連エントリ

  • このエントリーをはてなブックマークに追加