duanpendan8067 2016-03-13 17:07
浏览 18

学习OOP,怎么了?

I can't get why the Exception always fires when the value of $lf is 1 or 2.

class Demo {
    public function __construct($lv) {
        if ($lv != 1 || $lv != 2) {
            throw new Exception('Wrong access level!');
        }    
    }

    $objDemo = new Demo(1);

What I want is for an exception to be thrown if the value of $lv isn't 1 or 2.

  • 写回答

2条回答 默认 最新

  • douzhongpi9734 2016-03-13 17:12
    关注

    Your issue is not OOP-related.

    You're passing the value of 1 into your $lv variable. That makes for the following situation:

    $lv = 1;
    
    if ( $lv != 1 || $lv != 2 ){
        throw new Exception('Wrong access level!');
    }
    

    We can separate what's in the if statement:

    • The first expression ($lv != 1) will be evaluated to false because 1 does equal 1.
    • The second expression ($lv != 2) will be evaluated to true because 1 does not equal 2.

    In this case:

    false || true
    

    Evaluates to true.

    What you want instead is to change the or operator to an and operator:

    if ( $lv != 1 && $lv != 2 ){
        throw new Exception('Wrong access level!');
    }
    

    Or, equivalently:

    if ( !( $lv == 1 || $lv == 2 )){
        throw new Exception('Wrong access level!');
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀