其中:
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
我不确定如何解决问题。
所以我理解这是一个简写操作符,通常是一个例子:
$value ? true : false
含义
if $a = true { true } else { false };
这样:
if $a{
if $a{
true;}
else{
0;};
else{
if $0{
$a;}
else{
true;}
};
这会使$ a的值变为真吗?
答案 0 :(得分:3)
$a
的值为true
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
速记可以解释如下:
if($a) {
if($a) {
$a = $b;
} else {
$a = $c;
}
} else {
if($c) {
$a = $a;
} else {
$a = $b;
}
}
因为$a
因首先不存在而为假,所以它立即跳转到其中的else语句。所以唯一重要的部分是:
if($c) {
$a = $a;
} else {
$a = $b;
}
0
与false
相同,因此$c
将返回false,因此$a
等于$b
,即{{1} }}
修改强>
对引发的通知进行了一些讨论,但是这没有说明通知不是真正的错误,因此没有中断代码。结果不是true
,如果不是我们用Notice: Undefined variable: a
确定最后$a
的值,那么“结果”(认为这些人的意思是输出)将是空白的。 问题是var_dump
的价值变为什么,而不是屏幕上显示的内容。
屏幕上显示未设置变量的内容与$a
的值无关。
如果您执行以下代码,则通知不是唯一实现的内容:
$a
所以输出是:
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
var_dump($a);
发出通知的事实并不妨碍E_NOTICE : type 8 -- Undefined variable: a -- at line 5
bool(true)
成为真实。
通知很容易被压制......
$a
会导致error_reporting(0);
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
var_dump($a);
仍然变为真,并且没有看到通知。
$a
答案 1 :(得分:1)
如果按原样运行代码,您将获得:Notice: Undefined variable: a in myfile.php on line 4
因此,我会假设$a
早先设置在某处。然而,无论$ a之前有什么价值,如果$ a可以被评估为真或假,那么在运行代码之后$ a仍然是真的,原因如下:
如果$ a为真,则第一部分将产生$ a = $ b,我们知道$ b = true。
if(TRUE) {
if(TRUE) {
$a = $b; //AND $b == TRUE
} else {
$a = $c;
}
} else {
...
}
如果$ a为假,那么第二部分将再次产生$ a = $ b
if(FALSE) {
...
} else {
if(0) { // 0 will equate to FALSE
...
} else {
// 0 is the same as FALSE so we end up again with $a = $b
$a = $b; //AND $b == TRUE
}
}
事实上,如果你运行这段代码,它会告诉你$ a的值两次都是真的:
<?php
$a = false;
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
echo $a;
$a = true;
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
echo $a;