print は関数ではありません

藏色散人
藏色散人転載
2019-06-03 17:07:152497ブラウズ

print は関数ではありません

これは一見奇妙な質問から来ています:

if (print("1\n") && print("2\n") && print("3\n") && print("4\n")) {
    ;
}

このコードは何を出力すると思いますか?

実際の出力は次のとおりです。

4
111

私たちは、print が文法構造 (言語構造) であり、関数ではなく、パラメーターのリストに括弧が必要ないことを多くの場合無視します (括弧を書いた場合でも、括弧は同様に使用します)構文解析段階では無視されます)、これは常に 1 を返す単なる「式 (expr)」です:

expr :
   T_PRINT expr
 | '(' expr ')'
;
所以其实上面的代码在php看来是:
if (print ("1\n" && print ("2\n" && print ("3\n" && print "4\n")))) {
  ;
}

したがって、4 を出力し、次に「3」を出力します。&& print の結果は次のようになります。 1、次に "2\n" && 1 が出力され、最後に "1\n" && 1

そして、上記のコードの意図を達成したい場合は、次のように記述する必要があります。

うわー

以上がprint は関数ではありませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlaruence.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。