<?php
$a = 1;
$b = 2;
$c = 3;
$d = 4;
$a = $b !== $c && $d = $b == $c;
var_dump($a,$d);keluar;
Apa yang saya faham di sini ialah: Pertama, kerana !== mempunyai keutamaan yang lebih tinggi daripada &&, pertama hakim $b !== $c (adalah benar) dan $b == $c* (adalah palsu), dan kemudian lakukan && Penghakiman, dan untuk &&, laksanakan bahagian kiri dahulu, dan kemudian laksanakan bahagian kanan berdasarkan keputusan Kemudian bahagian kiri ialah $a = benar, dan kemudian bahagian kanan ialah $d = salah, tetapi mengapa pencetakan $a false? Kemudian saya faham bahawa ini sebenarnya:
$a = (true && ($d = false));
Saya tidak faham ini Jika && tidak merujuk kepada ungkapan di sebelah kiri, tetapi nilai $b !== $c di sebelah kiri, maka mengapa $d = false boleh dijalankan di sebelah kanan? Apakah kombinasi ini? Bagaimana untuk menggabungkannya...
Saya menyemak banyak maklumat dan bertanya kepada beberapa rakan sekerja Mereka semua mengatakan bahawa ia sukar untuk dijelaskan dan tidak boleh digunakan dalam pembangunan harian. gangguan kompulsif, saya benar-benar ingin memikirkannya. Bolehkah seseorang membantu saya. Tolong beri saya nasihat tentang cara memahami dan menilai keutamaan operator dan isu pelaksanaan PHP, kerana sebenarnya masih terdapat banyak kaedah penulisan sedemikian dalam sumber terbuka. kod.
Sebenarnya, ia serupa dengan $a = $b && $b = $ c;
Akhirnya $a adalah benar, tetapi $b ialah nilai $c ketiga-tiga pembolehubah abc adalah kesemuanya 1, 2, dan 3 di atas).
Untuk operator logik, anda boleh melihatnya dengan cara ini Ungkapan pada kedua-dua belah setiap operator logik akan digabungkan menjadi satu keseluruhan$b !== $c && $d = $b = = $c, untuk ungkapan ini, dua kombinasi akan dijana:
($b !== $c)
Gabungan 2:Untuk
$b !== $c && $d = $b == $c
,对于这个表达式,将会生成两个组合:($b !== $c) && ($d = $b == $c)
组合1:
($b !== $c)
组合2:
($d = $b == $c)
所以先执行组合1
($b !== $c)
,结果是true
,根据短路运算,需要执行组合2($d = $b == $c)
,对于这个组合,里面又由于==
运算符优先级高,执行==
,在赋值,也就是false
. 所以最终组合1的结果是true
,组合2的结果是false
,所以$a=false
.这里解释了可以执行右边的赋值表达式,而不执行左边的赋值表达式,因为左边的赋值表达式优先级低,在执行它之前,需要执行完
!==
, 再执行&&
,之后接着执行==
,再执行右边的=
,再执行左边的=
($b !== $c) && ($d = $b == $c)
kombinasi 1 :true
, mengikut operasi litar pintas, gabungan 2($d = $b == $c) code> perlu dilaksanakan , untuk gabungan ini, kerana operator
==
mempunyai keutamaan yang tinggi,==
dilaksanakan sebelum diberikan, iaitufalse kod>. Jadi pada akhirnya Hasil gabungan 1 adalah!==code> perlu dilaksanakan, dan kemudian
benar
, dan hasil gabungan 2 adalahfalse
, jadi$a=false
. 🎜🎜Di sini dijelaskan bahawa bahagian kanan boleh dilaksanakan ungkapan Tugasan dan bukannya melaksanakan ungkapan tugasan di sebelah kiri, kerana ungkapan tugasan di sebelah kiri mempunyai keutamaan yang rendah,&& code>, kemudian laksanakan
==
, kemudian laksanakan=
di sebelah kanan, dan kemudian laksanakan=
di sebelah kiri🎜.🎜Saya di sini untuk mengadu Saya tidak melihat baris ini yang anda tulis
$a = $b !== $c && $d = $b == $c;
dengan teliti, saya salin dan tampal, haha, 666..Abang besar:
1. Kod tersebut ada dalam buku
2 Projek kod sebegini jarang wujud, hampir 0
3 Walaupun terdapat keperluan yang serupa, () akan digunakan untuk mencapai kebolehbacaan Tujuan membuat model lebih kukuh
4 Keperluan sedemikian boleh difahami dengan mudah, tetapi kebolehgunaannya tidak kuat.