Pengendali logik dan keutamaan pengendali tugasan dalam PHP.
P粉176980522
2023-08-07 11:55:52
<p>Saya baru-baru ini menemuinya dalam petikan seperti ini:</p>
<pre class="brush:php;toolbar:false;">$x = 2 && $y = 3; pra>
<p>Coretan kod ini menghasilkan output 1:3. Dengan melihat jadual keutamaan operator, saya mendapati bahawa operator logik || dan && mempunyai keutamaan yang lebih tinggi daripada operator tugasan =. Oleh itu, ungkapan pertama harus dianggap sebagai $x = ($y || 2) = 3; . Kedua, pengendali tugasan mempunyai susunan yang betul, jadi jurubahasa harus cuba melakukan false = 3, yang jelas menyalahi undang-undang. Jadi, pada pendapat saya, coretan kod yang disebutkan di atas sepatutnya gagal untuk disusun dan harus membuang ralat parse atau runtime. Tetapi sebaliknya, coretan ini menghasilkan 1:3. Ini bermakna apa yang dilakukan oleh jurubahasa ialah: </p>
<blockquote>
<p>a) $y=3</p>
<p>b) 2 &&
<p>c) $x = (2 && $y)</p>
</blockquote>
<p>Mengapa melakukan ini dan bukannya berdasarkan keutamaan pengendali?</p>
Jadual keutamaan operator yang anda berikan menyatakan sebagai ulasan berasingan:
Jadi, sebenarnya, tugasan dalam ungkapan akan dianggap sebagai subungkapan. Bagaimana dan bila ini dilakukan tidak dinyatakan dengan jelas dalam dokumentasi, yang hanya menyatakan bahawa ungkapan "serupa" akan berfungsi dengan cara ini.