php陷阱?
<code>$a=3; $b=6; $c=1; if($a=5||$b=7 && $c=10){ var_dump($a, $b,$c);//bool(true) int(6) int(1) $a++; $b++; } var_dump($a, $b,$c);//bool(true) int(7) int(1) </code>
请问为什么会这样输出?
回复内容:
<code>$a=3; $b=6; $c=1; if($a=5||$b=7 && $c=10){ var_dump($a, $b,$c);//bool(true) int(6) int(1) $a++; $b++; } var_dump($a, $b,$c);//bool(true) int(7) int(1) </code>
请问为什么会这样输出?
虽然你的这个判断写的奇奇怪怪的,不过我想应该是故意的吧,应该不是书写BUG。
这个并不是PHP的BUG,而是你自己没有好好理解运算符的优先级的问题,建议看看这个:
- 运算符优先级
- 逻辑运算符
把你的那个判断加上括号,那么你可以这么理解这个逻辑判断
<code>$a = ( 5 || ( ( $b = 7 ) && ( $c = 10 ) ) ) </code>
你可以把括号加上放到程序中测试,结果也还是一样的。从上面我们就可以看出,由于=
的优先级是最低的,所以先执行了( 5 || ( ( $b = 7 ) && ( $c = 10 ) ) )
。由于||
和&&
的操作符是同级的,所以从左到右进行操作,5
这个数字被程序判断为true
。至于为什么可以看手册:转换为布尔值
根据或
操作原则。二者中只要有一者判断为true
则立即结束判断,所以或
操作后面的都不执行了。最后将true
赋值给$a
变量。这就是为什么只有$a
变量的值变了,而$b
和$c
没变的原因。
你可以把逻辑判断改成这样:
<code>$a=0 || $b=7 && $c=10 </code>
看看结果是什么?
由于0
被程序认定为false
,所以或操作得以继续执行。或操作的右边是与操作,由于是两个赋值操作,所以是true
,fase or true
的值也是true
,所以$a=true
,$b=7
,$c=10
另外,增加括号可以提高优先级,如果要达到复制的目的,我们可以这样做
<code>($a=0) || ($b=7) && ($c=10) //可以试试($a=5) || ($b=7) && ($c=10) </code>
补充:
看到程序主体,忘记看下面的++
了,其实下面还有一个需要我们注意的就是$a++
这个操作,++
是递增操作,但是为什么得到的结果还是true
呢?通过查阅手册,我们能发现,虽然很短,但是这句话对我们的帮助非常之大:
递增或递减布尔值没有效果。 —— 递增/递减运算符
至此,程序的真相大白于天下了。至于为什么PHP会做这样的设定,可能是因为PHP是用C编写的原因(个人臆测,不可信)。
所以程序告诉我们一件事,所想并非所得,要善于怀疑自己。以上!
if($a=5||$b=7 && $c=10)
你这个判断有问题,判断相等用的是==

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
