gpt4 book ai didi

php - PHP 中 or 运算符的行为

转载 作者:IT王子 更新时间:2023-10-29 00:39:27 25 4
gpt4 key购买 nike

我正在尝试了解 or 运算符的行为。请看下面的例子:

$e = false || true;
var_dump($e);

输出如预期:bool(true);

$f = false or true;
var_dump($f);

输出如预期:bool(false)。我以 =Or 具有更高优先级的方式理解这一点,这就是为什么将 $f 分配给 错误

但下面的代码与我的想法完全相反。我认为 $foo 将分配给 5 然后与自身进行比较。但是 $foo 仅在 $foo 设置时才被分配,这意味着它正在检查 $foo 是否已分配给之前的任何内容, 给它赋值 5。

$foo or $foo = 5; 

谁能解释为什么会这样?

最佳答案

基础知识:

  1. 赋值表达式产生赋值。

    这是什么意思? $foo = 'bar' 是一个表达式,其中赋值运算符 = 赋值。表达式总是返回一个值本身。就像表达式 1 + 2 产生值 3 一样,表达式 $foo = 'bar' 产生值 '栏”。这就是它起作用的原因:

    $foo = $bar = 'baz'; // which is: $foo = ($bar = 'baz');
  2. bool 运算是短路运算。如果不需要,并不总是对双方进行评估。 真|| false 总的来说总是true,因为左边的操作数是true,所以整个表达式必须是truefalse 甚至未在此处计算。

  3. Operator precedence指示表达式的各个部分以何种顺序分组为子表达式。优先级较高的运算符与其操作数组合在优先级较低的运算符之前。

因此:

$e = false || true;

错误 || true 正在被评估,这导致值 true,它被分配给 $e|| 运算符的优先级高于 =,因此 false || true 被分组到一个表达式中(与 ($e = false) || true 相对)。

$f = false or true;

现在 or 的优先级低于 =,这意味着赋值操作在 or< 之前被组合到一个表达式中。因此,首先对 $f = false 表达式求值,其结果为 false(见上文)。那么你就有了简单的表达式 false or true,接下来对其求值并得到 true,但没人关心它。

评估工作是这样的:

1. $f = false or true;
2. ($f = false) or true; // precedence grouping
3. false or true; // evaluation of left side ($f is now false)
4. true; // result

现在:

$foo or $foo = 5; 

在这里,$foo = 5 具有更高的优先级,并被视为一个表达式。由于它出现在 运算符的右侧,因此仅在必要时才对表达式求值。这取决于 $foo 最初是什么。如果 $footrue,则根本不会计算右侧,因为 true or ($foo = 5) 必须为 true 整体。如果 $foo 最初有一个错误的值,则计算右侧并将 5 分配给 $foo,这将导致 5,这是 true-ish,这意味着整个表达式是 true,没有人关心这一点。

1. $foo or $foo = 5;
2. $foo or ($foo = 5); // precedence grouping
3. false or ($foo = 5); // evaluation of left side
4. false or 5; // evaluation of right side ($foo is now 5)
5. true; // result

关于php - PHP 中 or 运算符的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12213283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com