2016-02-24 89 views
2

其中:不知道是什么的值是

$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;} 
}; 

这确实让价值$是真的吗?

+1

这里什么是您的问题 – Gopalakrishnan

+2

结果是'注意:未定义的变量:A' – RiggsFolly

+1

是因为你还没有宣布$ a的值,你在速记条件下使用之前。 – Gopalakrishnan

回答

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是摆在首位不存在虚假,它会立即跳转到其他语句。这样对你很重要的唯一的部分是:

if($c) { 
    $a = $a; 
    } else { 
    $a = $b; 
    } 

0相同false,所以$c会回来为假,因此$a等于$b,这是true

编辑:

有上时引发该通知的一些讨论,但这个无法说清的事实,声明并非真正的错误,因为这是没有中断的代码。结果不是Notice: Undefined variable: a,“结果”(认为这些人的意思是输出)应该是空白的,如果它不是我们在var_dump末尾确定$a的值。 问题是$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仍然成为现实,并且没有看到通知。

bool(true) 
+1

非常感谢你,这就是我想要得到的,这是我的逻辑。感谢天堂! –

+0

我不同意这个答案。如果按原样运行代码,则会得到“注意:未定义的变量:第4行myfile.php中的一个”。看看我的答案,看看它的另一种方式.. – mseifert

+0

注意错误不是真正的错误(可以很容易地通过关闭通知来抑制),而通知被抛出'$ a'在第一个错误时仍然是错误的如果陈述;所以如果你运行代码,那么'var_dump($ a);'你会得到结果'bool(true)' – skrilled

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 = $ 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; 
相关问题