変数が空であるとみなされるかどうかを判断します
しかし、私の記憶では、ある日、次のようになるまでは、empty でものが空であるかどうかを判断できるはずだと常に考えていました。 a ))」と使用する際にマニュアルを確認したところ、empty関数は変数が空かどうかの判定のみで、文字列(または関数の戻り値を含むその他の値)が空かどうかの判定はできないことが分かりました。それが表面的な理由であることはわかっていましたが、深い理由はわかりませんでした。
私は最近 PHP カーネルに興味を持ち、この問題を再度考えたので、他の人の経験に基づいて次のコードを書きました:
コードをコピー コードは次のとおりです:
php
echo "< pre>";
$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 empty
(
T_STRING Trim
(
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 に戻り値がある場合、それを関数と呼ぶのは間違いであると述べています)
http://www.bkjia.com/PHPjc/320397.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/320397.html技術記事変数が空であるとみなされるかどうかを判断する しかし、私の記憶では、長い間、ものが空であるかどうかを判断できるはずだと常に考えていました...。