我无法理解为什么当$lf
的值为1或2时,异常总会触发。
class Demo {
public function __construct($lv) {
if ($lv != 1 || $lv != 2) {
throw new Exception('Wrong access level!');
}
}
$objDemo = new Demo(1);
我想要的是,如果$lv
的值不是1或2,则抛出异常。
答案 0 :(得分:3)
您的问题与OOP无关。
您将值1传递给$lv
变量。这导致以下情况:
$lv = 1;
if ( $lv != 1 || $lv != 2 ){
throw new Exception('Wrong access level!');
}
我们可以将if语句中的内容分开:
$lv != 1
)将被评估为false,因为1等于1. $lv != 2
)将被评估为true,因为1不等于2. 在这种情况下:
false || true
评估为真。
您想要的是将或运算符更改为和运算符:
if ( $lv != 1 && $lv != 2 ){
throw new Exception('Wrong access level!');
}
或等同地:
if ( !( $lv == 1 || $lv == 2 )){
throw new Exception('Wrong access level!');
}
答案 1 :(得分:1)
您的表达式($lv!=1 || $lv !=2)
始终为真......每个数字都不是1或者不是2.您可能想要($lv !=1 && $lv !=2)
。但是你的要求并不清楚,所以它可能是别的。