PHP运算符优先级的一个例外
今天在老王的技术手册看到一个问题:
<?php if ($a = 100 && $b = 200) { var_dump($a, $b); }
输出是什么?
这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单,
如果说布尔与之前的部分, 是由于优先级的问题, 但是如果仅仅是优先级的问题的话, 那么结果应该是:
$a = (100 && $b) = 200
而实际上的结果, 确实高优先级的&&让步给次优先级的=, 让 $b = 200 先结合了.
究其原因, 是因为PHP并不完全遵守优先级的定义, 这个在PHP的手册中也有说明:
Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
这样的设计, 个人不发表看法, 反正在C语言中, 这样类似的语句是判定为语法错的. PHP采用这样的设计, 很可能是历史原因,
有好奇的同学, 会想知道到底为什么, 之前jayeeliu网友也问过:
laruence你好:
问一个php运算符优先级的问题
$t == 1 && $tt = 2
按照php运算符优先级应该是
(($t == 1) && $tt) = 2
这个顺序执行,但实际上应该是
($t == 1) && ($tt = 2)
我有些不太理解。
其实也简单, 运算符优先级是在存在二义性文法的时候的一种规约规则选择的手段, 而PHP的语法分析文件定义中, 却让等号和T_BOOLEAN_AND(&&)之前不存在了规约冲突:
expr_without_variable: // 有隐规则存在, 相当于T_BOOLEAN_AND成为了"一元操作符". | expr T_BOOLEAN_AND { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr
最后, 顺便说一下, PHP对应于T_BOOLEAN_AND 还定义了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 这俩个的优先级都低于等号, 于是就会有了, 很多PHP入门教材示例代码中经典的:
$result = mysql_query(*) or die(mysql_error());
类似的还可以用or来实现三元操作符(?:)的功能:
$person = $who or $person = "laruence"; //等同于: $person = empty($who)? "laruence" : $who;
更多PHP相关知识,请访问PHP中文网!
Atas ialah kandungan terperinci PHP运算符优先级的一个例外. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

AI Hentai Generator
Menjana ai hentai secara percuma.

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



Windows melakukan tugas yang hebat dalam memperuntukkan sumber sistem kepada proses dan program yang paling memerlukannya dengan memberikan keutamaan kepada mereka. Kebanyakan aplikasi yang anda pasang akan berjalan dengan baik pada tahap keutamaan "biasa" lalai. Kadangkala, walau bagaimanapun, anda mungkin perlu menjalankan program, seperti permainan, pada tahap yang lebih tinggi daripada tahap biasa lalai untuk meningkatkan prestasinya. Tetapi ini memerlukan kos, dan ini adalah perjanjian yang patut difikirkan. Apakah yang berlaku apabila anda menetapkan apl kepada keutamaan tinggi? Windows mempunyai sejumlah enam tahap keutamaan untuk menjalankan proses dan program yang berbeza - rendah, di bawah normal, normal, melebihi normal, tinggi dan masa nyata. Windows akan memberi kedudukan dan baris gilir aplikasi berdasarkan keutamaan mereka. Semakin tinggi keutamaan, aplikasi

Pemberitahuan ialah alat yang hebat untuk produktiviti, tetapi kadangkala ia boleh mengganggu. Sama ada anda ingin melumpuhkan pemberitahuan sepenuhnya atau untuk apl terpilih, halaman ini adalah perkara yang anda perlukan. Kami juga akan melihat cara untuk melumpuhkan dan mendayakan pemberitahuan secara automatik menggunakan FocusAssist. Selain itu, jika apl Tetapan bukan untuk anda, anda boleh menggunakan alatan seperti Command Prompt, Registry Editor dan Group Policy Editor untuk cara yang lebih geeki untuk melumpuhkan pemberitahuan. Lihat tutorial berikut untuk mengetahui 7 cara untuk melumpuhkan pemberitahuan pada Windows 11. Mengapa anda perlu melumpuhkan pemberitahuan pada Windows 11? Melumpuhkan pemberitahuan mempunyai pelbagai kelebihannya, beberapa daripadanya disenaraikan di bawah. Walau bagaimanapun, perlu diingat bahawa melumpuhkan pemberitahuan untuk apl penting mungkin

Apakah keutamaan proses? Komputer tidak begitu berbeza dengan penciptanya. Walaupun nampaknya mereka berbilang tugas, mereka sebenarnya bergelut antara tugas secara spontan. Tetapi tidak semua proses atau program mempunyai sumber yang sama diperuntukkan. Proses penting, seperti yang diperlukan untuk memastikan sistem berjalan selancar mungkin, diberi keutamaan tinggi, manakala proses yang hanya berfungsi secara persisian boleh diberikan keutamaan yang lebih rendah. Ini membantu sistem berjalan lancar walaupun dalam keadaan tertekan. Apakah keutamaan? Proses mempunyai 6 keutamaan yang berbeza. Ini adalah seperti berikut: Rendah – Ini adalah keutamaan terendah. Proses dengan keutamaan "rendah" hanya akan menerima sumber yang diperlukan selepas semua tugasan lain selesai. Di bawahNorma

Pengurus Tugas baharu dalam Windows 11 22H2 adalah rahmat untuk pengguna berkuasa. Ia kini menyediakan pengalaman UI yang lebih baik dengan data tambahan untuk memantau proses, tugas, perkhidmatan dan komponen perkakasan anda yang sedang berjalan. Jika anda telah menggunakan Pengurus Tugas baharu, anda mungkin perasan mod produktiviti baharu. apa itu? Adakah ia membantu meningkatkan prestasi sistem Windows 11? Mari ketahui! Apakah Mod Produktiviti dalam Windows 11? Mod produktiviti ialah salah satu tugas dalam Pengurus Tugas

Dalam bahasa C, tiada operator root Fungsi terbina dalam "sqrt()" digunakan untuk membuka root, dan sintaks "sqrt(value x)" digunakan sebagai contoh, "sqrt(4)" adalah untuk melaksanakan operasi punca kuasa dua pada 4. , hasilnya ialah 2. sqrt() ialah fungsi operasi akar terbina dalam bahasa C Hasil operasinya ialah punca kuasa dua aritmetik bagi fungsi pembolehubah;

Menyesuaikan tetapan pemberitahuan umum Mari mulakan dengan asas tetapan pemberitahuan. Pertama, jika anda ingin menyediakan pemberitahuan pada Windows 11, terdapat dua cara untuk melakukannya. Cara terpantas adalah dengan mengklik kanan bahagian tarikh dan masa di penjuru bar tugas dan pilih Tetapan Pemberitahuan. Sebagai alternatif, anda boleh menggunakan menu Mula untuk membuka apl Tetapan dan pilih Pemberitahuan dalam bahagian Sistem (dibuka secara lalai). Di sini anda akan melihat gambaran keseluruhan tetapan pemberitahuan anda. Anda boleh melumpuhkan pemberitahuan sepenuhnya, atau klik pada pilihan pertama, Pemberitahuan, untuk mengembangkan menu lungsur. Menu ini mempunyai beberapa pilihan tambahan, seperti mematikan bunyi pemberitahuan. Anda juga boleh memilih sama ada anda mahu pemberitahuan dipaparkan pada skrin kunci, termasuk tetapan khusus untuk peringatan dan panggilan masuk.

Penjelasan terperinci tentang kaedah pelarasan keutamaan proses Linux Dalam sistem Linux, keutamaan proses menentukan susunan pelaksanaannya dan peruntukan sumber dalam sistem. Melaraskan keutamaan proses secara munasabah boleh meningkatkan prestasi dan kecekapan sistem. Artikel ini akan memperkenalkan secara terperinci cara melaraskan keutamaan proses dalam Linux dan memberikan contoh kod khusus. 1. Gambaran keseluruhan keutamaan proses Dalam sistem Linux, setiap proses mempunyai keutamaan yang berkaitan dengannya. Julat keutamaan biasanya -20 hingga 19, di mana -20 mewakili keutamaan tertinggi dan 19 mewakili

Bagi pembangun Golang, "invaliduseof...operator" ialah ralat biasa. Ralat ini biasanya berlaku apabila menggunakan fungsi parameter panjang berubah-ubah. Ia akan dikesan pada masa penyusunan dan menunjukkan bahagian mana yang mempunyai masalah. Artikel ini akan memperkenalkan cara menyelesaikan ralat ini. 1. Apakah fungsi parameter panjang pembolehubah? Fungsi parameter panjang pembolehubah juga dipanggil fungsi parameter pembolehubah Ia adalah jenis fungsi dalam bahasa Golang. Menggunakan fungsi parameter panjang boleh ubah, anda boleh menentukan berbilang fungsi seperti berikut:
