不确定 a 的值是多少
Not sure what the value of a is
其中:
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
我不知道如何算出一个。
所以我理解这是一个 shorthand 运算符,通常是这样的情况:
$value ? true : false
意义
if $a = true { true } else { false };
所以:
if $a{
if $a{
true;}
else{
0;};
else{
if [=13=]{
$a;}
else{
true;}
};
这会使 $a 的值为真吗?
$a
的值将是 true
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
shorthand可以这样理解:
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
,也就是true
.
编辑:
对抛出的通知进行了一些讨论,但这并没有说明通知并不是真正的错误,因此没有中断代码。结果不是Notice: Undefined variable: a
,如果不是我们用[=28=来确定$a
的值,"result"(以为这些人的意思是输出)就是空白]. 问题是 $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
仍然变为 true,并且没有看到通知。
bool(true)
如果您 运行 按原样编写代码,您将得到:Notice: Undefined variable: a in myfile.php on line 4
因此,我假设 $a
设置得较早。然而,无论 $a 之前有什么值,如果 $a 可以被评估为 true 或 false,则 $a 在 运行 执行您的代码后仍然为真,原因如下:
如果 $a 为真,那么第一部分将产生 $a = $b 并且我们知道 $b = 真。
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;
其中:
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
我不知道如何算出一个。
所以我理解这是一个 shorthand 运算符,通常是这样的情况:
$value ? true : false
意义
if $a = true { true } else { false };
所以:
if $a{
if $a{
true;}
else{
0;};
else{
if [=13=]{
$a;}
else{
true;}
};
这会使 $a 的值为真吗?
$a
的值将是 true
$b = true;
$c = 0;
$a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
shorthand可以这样理解:
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
,也就是true
.
编辑:
对抛出的通知进行了一些讨论,但这并没有说明通知并不是真正的错误,因此没有中断代码。结果不是Notice: Undefined variable: a
,如果不是我们用[=28=来确定$a
的值,"result"(以为这些人的意思是输出)就是空白]. 问题是 $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
仍然变为 true,并且没有看到通知。
bool(true)
如果您 运行 按原样编写代码,您将得到:Notice: Undefined variable: a in myfile.php on line 4
因此,我假设 $a
设置得较早。然而,无论 $a 之前有什么值,如果 $a 可以被评估为 true 或 false,则 $a 在 运行 执行您的代码后仍然为真,原因如下:
如果 $a 为真,那么第一部分将产生 $a = $b 并且我们知道 $b = 真。
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;