私は上記のコードが323を出力することを知っています
しかし、323をどのように出力するかについての説明が必要です
誰でも説明できますか?
echoとprintはどちらも、関数ではなく言語構造のように動作することを目的としています。そのため、制御の流れがあります。ここでコードで行われるのは、言語構造(echo)の内部からprintを呼び出していることです。つまり、echoがタスクを完了する前に、printが最初に出力を送信します(echoの内部からprintを呼び出したことを思い出してください)。
何が起こっているかをもう少し明確に示すために、実際には演算子の優先順位とはまったく関係ありません。
echo ('a') . ('b' * (print 'c')); // ca0
// This is the same thing as...
echo 'a' . 'b' * print 'c'; // ca0
ここでの結果の出力では、演算子は文字の順序に影響を与えないことに注意してください。
printは常に1を返すため、ここで行われるのは、で算術演算を実行したことです'b' * 1
。これは、攪拌bにprintの戻り値を掛けたものです。したがって、なぜ出力をc(echoがその仕事を終える前に送信された出力を印刷する)として表示するのか、最初に、次にechoが印刷することになっていたすべてのものを表示します。
次の例でさらに詳しく説明します...
echo print 'a' . 'b' . 'c'; // abc1
その出力の最後にある1に注意してください。これは、すべてのエコーが文字列ではなくprintの戻り値を出力したためです。代わりに、printがabc
出力として提供されたものです(echoは、コンストラクト内のすべてを処理して終了するまで待機する必要があるため、echoができる前に出力を送信できることを覚えておいてください)。
これにより、さらに明確になります...
echo (print 'a') . 'b' . 'c'; // a1bc
これで、1はaの直後に来ます。
echoで各式の出力を個別に送信する場合は、処理して出力に送信する式ごとに1つの引数を指定できます...たとえば、次のようになります。
echo print 'a', 'b', 'c'; // a1bc
echo 2, 3 * print 3; // 233
それがあなたにとってもう少し明確になることを願っています。
その理由は(print 3)
、以前の演算子よりも優先されるためです。`echo(8)と書くと。(7 *(印刷3)); たとえば、387を取得します。
ここ
エコー(2)。(3 * print(3));
ステップ1:(実行を開始する)
echo (2).(3*print(3)); //Output = ''
ステップ2:(印刷アクションが実行されます)
echo (2).(3*1); // Will print 3 and returns 1 as per print function. Output = 3
ステップ3:(乗算演算)
echo (2).(3); // Multiplication operation willtake place. Output = 3
ステップ4:(データを印刷します)
echo (2).(3); //The . Operator will used to concate the strings in php, thus Output = 323
印刷はエコーよりも優先されるため、最初に3を印刷し、後で2と3を印刷します。