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