php三元运算符结合及其使用

伊谢尔伦
Lepaskan: 2023-03-10 22:48:01
asal
1882 orang telah melayarinya

三元运算符的功能与“if...else”流程语句一致,它在一行中书写,代码非常精练、执行效率更高。

在PHP程序中恰当地使用三元运算符能够令脚本更为简洁、高效。

代码格式如下:(expr1) ? (expr2) : (expr3);

解释:如果条件“expr1”成立,则执行语句“expr2”,否则执行“expr3”。

实现同样的功能,若使用条件流程语句,就需要书写多行代码:

if(expr1) { 
expr2;
} else {
expr3;
}
Salin selepas log masuk

可见,前面所说的三元运算符之好并非夸张。可是,多数情况下我们只在代码较为简单的时候使用三元运算符,即执行语句只为单句的时候。如:

$a>$b ? print "a大于b" : print "a小于b";
Salin selepas log masuk

事实上,三元运算符可以扩展使用,当设置的条件成立或不成立,执行语句都可以不止一句,试看以下格式:

(expr1) ? (expr2).(expr3) : (expr4).(expr5);
Salin selepas log masuk

我们非常明显地看到,多个执行语句可以使用用字符串运算符号(“.”)连接起来,各执行语句用小角括号包围起来以表明它是一个独立而完整的执行语句。这样扩展后它的功能更为逼近“if...else”流程语句。

同时三元运算符还可以嵌套使用。例如,a大于b成立时:如果a小于c,那么x=c-a否则x=a-c;否则a小于b成立时:如果b小于c,那么x=c-b否则x=b-c:

$a>$b ? $x=($a<$c ? $c-$a : $a-$c) : $x=($b<$c ? $c-$b : $b-$c);

嵌套使用的三元运算符可读性不太好,日后对代码的维护极可能存在问题,但比起“if...else”之类的流程语句,在上述情形之下,它的确太简练了,这是它的诱人之处。
对于喜欢偷懒和追求代码简洁的人来说,用三元运算符取代if流程语句应该是绝佳的选择。即使不用考虑“三元”中条件句以外的任意某一“元”,使用三元运算符仍然比if语句简练。以下语句的语法是正确的,它们以小解引号的方式忽略了第二或第三“元”:

$a>$b ? print "Yes" : "";
$a>$b ? &#39;&#39;: print &#39;No&#39;;
Salin selepas log masuk

应该注意的是:在使用三元运算符时,建议使用print语句替代echo语句。

注意下列一串语句的理解:

$str = $_GET[&#39;abc&#39;] ? &#39;wangjinbo&#39; : &#39;wjb&#39;;
Salin selepas log masuk

这里不能理解为:当$str等于$_GET['abc'] 时,赋值为 'wangjinbo' 否则赋值为 'wjb';因为一:判断相等应该用==;因原二:三元算符的语法是如上所示:(expr1) ? (expr2) : (expr3),显然上面的二元,三元'wangjinbo'或'wjb'不能单独构成一个有意义的表达式

正确理解是:当$_GET['abc']为空(也就是否,PHP中 '',null,0,undifine,都等效布尔值false)时,将$str赋值为'wangjinbo',否则赋值为'wjb';

结合性:

<?php 
$a=1;$b=2;$c=3;$d=4; 
echo $a<$b?&#39;xx&#39;:$a<$c?&#39;yy&#39;:$a<$d?&#39;zz&#39;:&#39;oo&#39;; 
?>
Salin selepas log masuk

一般按照其它语言(比如C或Java)的规则, 以上代码的运算逻辑是:

$a<$b => true => &#39;xx&#39; ==> 结束
Salin selepas log masuk

那么最后得到的结果就是'xx', 而再往后的运算都会被无视. php的三元运算竟然是向左结合的。

<?php 
$a=1;$b=2;$c=3;$d=4; 
echo (($a<$b?&#39;xx&#39;:$a<$c)?&#39;yy&#39;:$a<$d)?&#39;zz&#39;:&#39;oo&#39;; 
?>
Salin selepas log masuk

一目了然了吧, 这才是php的运算逻辑:

$a<$b => true => &#39;xx&#39; => true => &#39;yy&#39; => true => &#39;zz&#39; => 结束
Salin selepas log masuk

这其中涉及到两个类型转化的过程, 即 'xx' => true 和 'xx' => true.
不知这样的过程是否是蛋疼, 确实是让人很难理解...
最后再次回到上面的代码, 将其变为像C一样的向右结合吧:

<?php 
$a=1;$b=2;$c=3;$d=4; 
echo $a<$b?&#39;xx&#39;:($a<$c?&#39;yy&#39;:($a<$d?&#39;zz&#39;:&#39;oo&#39;)); 
// 括号换下位置就行了, php里括号省不得 
?>
Salin selepas log masuk

Atas ialah kandungan terperinci php三元运算符结合及其使用. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan