関数と混同されやすい PHP 5.4.10 の言語構造のリストを投稿します
ここでは、混同されやすいものの一部のみを示します。言語構造はたくさんあるので、すべてを列挙する必要はありませんし、マニュアルを一つ一つ確認するのは面倒です。実際、zend_ language_scanner.l に定義がある限り、それは言語構造です。 if、for、class、function、global などの演算子 (PHP の開始タグと終了タグ e09de51661299e279c28eb674097c296 を含む) およびこれらの演算子はすべて言語構造です。
多くの人は、次のものが関数であると誤解しています:
終了
死ぬ
戻る
エコー
印刷
評価
__halt_compiler
を含む
include_once
必要です
require_once
セット
空
設定を解除
リスト
また、言語構造の一部である特別な定数もいくつかありますが、それらは実行時に現在の環境に従って特別に処理され、その値はローカルでのみ意味があり、グローバルでは意味がありません。
__クラス__
__TRAIT__
__機能__
__方法__
__LINE__
__ファイル__
__DIR__
__名前空間__
これらの特別な定数は実行時にバインドされます。例として __CLASS__ のバインド コードは次のとおりです。
<ST_IN_SCRIPTING>"__CLASS__" {<br /> const char *class_name = NULL;<br /> <br /> if (CG(active_class_entry)<br /> && (ZEND_ACC_TRAIT ==<br /> (CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT))) {<br /> /* We create a special __CLASS__ constant that is going to be resolved<br /> at run-time */<br /> zendlval->value.str.len = sizeof("__CLASS__")-1;<br /> zendlval->value.str.val = estrndup("__CLASS__", zendlval->value.str.len);<br /> zendlval->type = IS_CONSTANT;<br /> } else {<br /> if (CG(active_class_entry)) {<br /> class_name = CG(active_class_entry)->name;<br /> }<br /> <br /> if (!class_name) {<br /> class_name = "";<br /> }<br /> <br /> zendlval->value.str.len = strlen(class_name);<br /> zendlval->value.str.val = estrndup(class_name, zendlval->value.str.len);<br /> zendlval->type = IS_STRING;<br /> }<br /> return T_CLASS_C;<br /> }