【问题标题】:Not sure what the value of a is不确定 a 的值是多少
【发布时间】:2016-02-24 00:57:47
【问题描述】:

地点:

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

【问题讨论】:

  • 这是你的问题
  • 结果是Notice: Undefined variable: a
  • 是的,因为在速记条件中使用之前,您还没有声明 $a 的值。
  • 我收到了这个问题,我认为情况就是这样。这是一个面试问题,他们从来没有给我答案,所以我来这里问。问题是 a 的值是多少,为什么?我得到的值是: $b = true; $c = 0; $a = ($a ? ($a ? $b : $c) : ($c ? $a : $b));
  • 注意不一定重要,最后$a的值是true我会在回答中解释。

标签: php backend shorthand-if


【解决方案1】:

$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,即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)

【讨论】:

  • 非常感谢,这就是我想要达到的目的,这就是我的逻辑。感谢上帝!
  • 我不同意这个答案。如果您按原样运行代码,您将得到“注意:未定义变量:myfile.php 中第 4 行的 a”。看看我的答案,看看另一种看待它的方式..
  • 通知错误不是真正的错误(可以通过关闭通知轻松抑制),而在第一个 if 语句中,$a 仍然是错误的;所以如果你运行代码然后var_dump($a);你会得到结果bool(true)
【解决方案2】:

如果你按原样运行代码,你会得到:Notice: Undefined variable: a in myfile.php on line 4

因此,我假设$a 设置得更早。然而,无论 $a 之前的值如何,如果 $a is 可以被评估为真或假,那么在运行您的代码后,$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;

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 2015-06-04
    • 2021-07-26
    • 2011-10-21
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多