学习OOP,怎么了?

时间:2016-03-13 17:07:43

标签: php class oop

我无法理解为什么当$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,则抛出异常。

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)。但是你的要求并不清楚,所以它可能是别的。

相关问题