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

您将如何解释php赋值语句?

php
  •  1
  • Joel  · 技术社区  · 6 年前

    $access = $access || $note->uid == $user->uid && user_access('note resource view own notes');
    

    我的第一个猜测是“将access中的任何内容分配给access,或者如果为空,uid值是否相等,是否与user_access的返回相同。”但我感觉这是不正确的,因为这似乎不合逻辑。

    2 回复  |  直到 6 年前
        1
  •  1
  •   nitowa    6 年前

    我在很久以前的一个库中就有这种类型的语句,它基本上是一个精心设计的(或者可能只是样式不好?)空检查。因为PHP使用短路求值,所以如果左侧表达式为null,则or表达式的右侧将不会求值。

        2
  •  1
  •   Peter van der Wal    6 年前

    首先看一看 Operator Precedence

    == 先于 && || 先于 =

    $access = (
        $access 
        || 
        ( 
            ($note->uid == $user->uid) 
            &&
            user_access('note') 
        ) 
    );
    

    将access中的任何内容分配给access,如果为空,

    不完全是:分配给 $access true *什么时候 $access 已经 evaluates to true ( 符合事实的 1 "some string" 等),或

    uid值是否相等并与用户访问的返回一致

    并以其他方式分配 false . 在此声明之后 $access 两者都是 错误的 ,即使 $access === 'yes'

    注*: || && 符合事实的 错误的