以下の式の内部手続きを教えてくれる人はいますか?
<?php echo '2' . print(2) + 3; ?>
// outputs 521
print
は関数ではないため、括弧は思ったように機能しません。(2) + 3
式( )の値を取得して5
出力します。それ自体が返さ1
れ、それが に連結されてから'2'
ed になりecho
ます。
print(2) + 3
print (2 + 3)
結果は 5 になります (またはと同じprint 2+3
です。この場合、print は実際には関数ではないため、括弧はほとんど意味がありません。最後に注意すべきことは、 が のprint
前に評価されることecho
です。
これまでの出力は次のとおりです。5
echo '2' . print
print は常に 1 を返すため、結果は 21 になります。
現在の出力は次のとおりです: '521'
以下で構成される連結文字列をエコーします。
文字列 '2' 関数 print('2') の結果。true が返され、1 に文字列化されます。 文字列 '3'
さて、ここでの操作の順序は本当におかしくて、521 に終わることはまったくありません! バリアントを試して、何が問題なのかを突き止めましょう。
echo '2'.print(2) + 3; これにより、521が得られます
PHP はそれを次のように解析します。
'2' をエコーします。(print('2') + '3')) ビンゴ!左側の出力が最初に評価され、「5」が出力されます。
'1' をエコーします。print('2') 次に、左の print が評価されるので、'52' を出力して、
'1' をエコーします。'1'; 成功。521。
印刷の結果をエコーしたり、エコーの結果を印刷したりしないことを強くお勧めします。そうすることは、そもそも非常に無意味です。
最初に 2 と 3 の加算が行われ、その結果が 5 になり、それが出力されます。
次の印刷は1
常に返されます。その戻り値は2
get21
に連結され、エコーされます。