# `echo` と `print` は言語構造 ###### tags: `php` ## `echo` は知ってたけど, `print` についても同様に `()` なしでの呼び出しができる なぜなら,関数ではなく言語構造であるからである. 通常の関数は,`parser` が解釈を行うが,`echo` や `print` については `lexer` というのが処理を行うとのこと. > 具体的には、他の関数については関数名の解釈はparserが行うのですが、この「関数に見えるけど言語構造」についてはlexer(tokenizerとも呼ばれます)レベルで別のトークンとして解釈されます。 https://hnw.hatenablog.com/entries/2009/05/09 `print` は,内部的には `echo` を利用しているだけであるとのこと. > ZEND_PRINT 命令は、評価結果に 1 を設定して ZEND_ECHO 命令を実行しているということがわかります。 https://y-uti.hatenablog.jp/entry/2015/12/07/000027 ## 言語構造と制御構造 言語構造:Language Structure. 制御構造:Controll Structure. 言語構造は,制御構造を含む. echo, if等が言語構造,if, while等が制御構造 以下引用画像がめちゃくちゃわかりやすかった. > ![](https://i.imgur.com/93GKDUW.png) > https://qiita.com/7968/items/d739e926189e219273bd#%E7%AC%AC4%E7%AB%A0-%E8%A8%80%E8%AA%9E%E6%A7%8B%E9%80%A0%E3%81%A8%E3%81%AF