【问题标题】:Why a PHP boolean expression becomes false when assigned to a variable为什么 PHP 布尔表达式在分配给变量时变为假
【发布时间】:2014-07-21 01:51:46
【问题描述】:

在将布尔表达式的计算结果分配给变量时,我在 PHP 脚本中看到了一种非常奇怪的行为。

当我评估这段代码时...

  <?php var_dump($is_admin or ($logged_in and ($user->uid === $uid))); ?>

...结果是:

  bool(true)

但是,当我将布尔表达式分配给变量时,例如...

 <?php $can_edit = $is_admin or ($logged_in and ($user->uid === $uid)); ?>
 <?php var_dump($can_edit); ?>

...结果变成:

 bool(false)

是什么导致了这种行为?我正在使用 PHP 5.3.10 和 Drupal 7

【问题讨论】:

    标签: php drupal variable-assignment boolean-logic boolean-expression


    【解决方案1】:

    运算符优先级。 or 的优先级低于 =,因此您只需将 is_admin 的值分配给变量。

    在表达式周围加上括号:

    $can_edit = ($is_admin or ($logged_in and ($user->uid === $uid))); 
    

    或者使用优先级更高的||&amp;&amp;

    $can_edit = $is_admin || ($logged_in && ($user->uid === $uid)); 
    

    通常or通常用于分隔动作,如:

    $stmt = $db->prepare("SELECT ...") or log_error($db->error);
    

    while || 用于计算布尔表达式。这就是不同优先级的原因(您不想将$stmt 设置为log_error() 的结果)。

    【讨论】:

    • 完美解释!谢谢!
    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2019-09-27
    • 2016-05-07
    • 1970-01-01
    • 2016-02-10
    • 2022-10-05
    相关资源
    最近更新 更多