为什么PHP布尔表达式在分配给变量时变为false

时间:2014-05-31 10:57:39

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

在将布尔表达式的计算结果分配给变量时,我在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

1 个答案:

答案 0 :(得分:5)

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

在表达式周围加上括号:

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

或使用优先级更高的||&&

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

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

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

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

相关问题