代码之家  ›  专栏  ›  技术社区  ›  UserKa

php是如何检查括号中的布尔值的

  •  2
  • UserKa  · 技术社区  · 7 年前

    我试图理解php是如何处理这个示例的。

    (\Auth::check() || \Auth::user()->isAdmin())
    (\Auth::check() && \Auth::user()->isAdmin())
    

    当我运行(\Auth::check()||\Auth::user()->isAdmin())它给我错误,因为\Auth::check()为false,\Auth::user()为null,但当我用&替换||时&虽然user对象仍然为null,并且isAdmin函数必须给出错误,但这没关系。

    我怀疑当有&&php检查第一个参数,它为false,然后php从不检查其他参数。我说得对吗?我这么认为是因为在我的例子中(false&null->方法)只给出false,但(false | null->方法)由于null->而给出错误;方法

    4 回复  |  直到 7 年前
        1
  •  2
  •   aknosis    7 年前

    您可以在此处阅读逻辑运算符: http://php.net/manual/en/language.operators.logical.php

    || 是或运算符,如果左侧或右侧为真,则条件将通过。首先测试操作员左侧,然后测试右侧

    && 是和运算符,如果左侧和右侧为真,则条件将通过。首先运行左侧,然后运行右侧。如果左侧为false,则永远不会计算右侧。

        2
  •  0
  •   NorteAmaru    7 年前

    我怀疑当有&&php只检查第一个参数并删除

    -不,a&&$如果$a和$b都为真,则b为真。

        3
  •  0
  •   slevy1    7 年前

    还有一件事。 true && null 将导致布尔上下文中的null计算为false,而表达式整体计算为false;见:第一个对照表 here .

    例子:

    <?php
    
    var_dump( true && null);
    

    live code.

    && 是一个二进制运算符,当使用此运算符的表达式计算时,两个可能结果中只有一个是可能的,即true或false。

        4
  •  0
  •   UserKa    7 年前

    $a = null
    dd(false && $a->func());
    

    它返回false,但它尝试了 dd(false || $a->func()); 返回错误: Undefined variable: null