---
# System prepended metadata

title: '`echo` と `print` は言語構造'
tags: [php]

---

# `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