変数が空であるとみなされるかどうかを判断します。
しかし、私の記憶では、ある日、このように「empty(trim)」になるまで、長い間、empty でものが空であるかどうかを判断できるはずだと考えていました。 ( $a)) を使用するとエラーが発生しました。その後、マニュアルを確認したところ、empty 関数は変数が空かどうかを判断することしかできず、文字列 (または関数の戻り値を含むその他の値) かどうかを判断することはできません。は空です。それが表面的な理由であることはわかっていましたが、深い理由はわかりませんでした。
私は最近 PHP カーネルに興味を持ち、この問題を再度考えたので、他の人の経験に基づいて次のコードを書きました:
コードをコピーコードは次のとおりです。
echo "
";
$tokens = token_get_all('foreach($tokens as $t){
if (is_array($t)){
printf("%s t %s n", token_name($t[0]) 、htmlspecialchars ($t[1])));
: (これが理解できない場合は、「リスト」をご覧ください。 PHP マニュアルの付録の「パーサー トークン」セクション)
T_OPEN_TAG T_EMPTY 空
(
T_STRING トリム (
T_VARIABLE $a
)
)
T_CLOSE_TAG ?>変数に対応するトークンは T_VARIABLE である必要があり、trim($a) は T_STRING に対応します。したがって、「empty(trim($a));」を直接実行すると、実行エラーが発生します:
致命的なエラー: 書き込みコンテキストで関数の戻り値を使用できません
直接実行したい場合はどうなりますか後で毛糸を空にしますか?結果は実行エラーではなく、解析エラーです:
解析エラー: 解析エラー、`T_STRING' または `T_VARIABLE' または `$'' を期待しています ...
(このエラー メッセージは混乱を感じます。 . . )
ビュー文字列に対応するトークンは T_CONSTANT_ENCAPSED_STRING (文字列構文) です。トークンのパラメータは異なりますが、T_VARIABLE ではありません。なぜなら、コンパイル段階でエラーが発生するはずです。 。 。
そこで、私はそれらの専門家の例に従って、PHP のソースコードを調べました。 。 。でも、関連するコードはまだ読んでいません(笑)、次回共有します〜
最後にもう一度言いますが、empty は関数ではなく言語構造です。
(print、echo、include、require、die などと同様、これらはすべて言語構造です。インターネット上の一部の記事では、print に戻り値がある場合、それを関数と呼ぶのは間違いであると述べています)