crb*_*aus 1 php boolean-logic drupal variable-assignment boolean-expression
当我将一个布尔表达式的计算结果分配给一个变量时,我在PHP脚本中看到了一个非常奇怪的行为.
当我评估这段代码时......
<?php var_dump($is_admin or ($logged_in and ($user->uid === $uid))); ?>
Run Code Online (Sandbox Code Playgroud)
......结果是:
bool(true)
Run Code Online (Sandbox Code Playgroud)
但是,当我将布尔表达式赋值给变量时,例如......
<?php $can_edit = $is_admin or ($logged_in and ($user->uid === $uid)); ?>
<?php var_dump($can_edit); ?>
Run Code Online (Sandbox Code Playgroud)
......结果变成:
bool(false)
Run Code Online (Sandbox Code Playgroud)
是什么导致了这种行为?我正在使用PHP 5.3.10和Drupal 7
运算符优先级.or优先级低于=,因此您只需将值is_admin赋给变量.
在表达式周围加上括号:
$can_edit = ($is_admin or ($logged_in and ($user->uid === $uid)));
Run Code Online (Sandbox Code Playgroud)
或使用||和&&,具有更高的优先权:
$can_edit = $is_admin || ($logged_in && ($user->uid === $uid));
Run Code Online (Sandbox Code Playgroud)
通常or通常用于分离动作,如:
$stmt = $db->prepare("SELECT ...") or log_error($db->error);
Run Code Online (Sandbox Code Playgroud)
||在计算布尔表达式时使用while .这是不同优先级的原因(您不希望设置$stmt为结果log_error()).
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |