不确定a的价值是什么

时间:2016-02-24 00:57:48

标签: php backend shorthand-if

其中:

$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的值变为真吗?

2 个答案:

答案 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;
  }

0false相同,因此$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;