不确定 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;
  }

0false一样,所以$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;