为什么使用未返回的方法会处理不同的方法?

时间:2017-07-07 20:02:13

标签: php methods

以下是我的代码的简化:

class myclass{

    public function one($called_from = null){
        if ( $called_from != 'two'){
            return $this->two();
        }
        echo 'done';
    }

    public function two(){
        return $this->one(__FUNCTION__);
    }
}

$obj = new myclass;
$obj->one();

现在我想添加另一种方法来进行比较(我在谈论if语句到myclass::one。所以这是新代码:

class myclass{

    public function one($called_from = null){
        $this->three($called_from);
        echo 'done';
    }

    public function two(){
        return $this->one(__FUNCTION__);
    }

    public function three($called_from){
        if ( $called_from != 'two'){
            return $this->two();
        }
    }  
}

$obj = new myclass;
$obj->one();

但它与第一​​版代码不同。为什么?我无法解释有什么不同,因为它需要显示我现实中存在的其他代码。

无论如何,您是否知道我如何通过另一种方法进行比较(进入myclass::one并保持整个过程中的确切行为?

另外,对于我的信息(与问题无关),您知道为什么该行会在this代码中两次执行吗?我希望它应该执行一次。

1 个答案:

答案 0 :(得分:1)

这是第二段代码中的操作顺序:

  1. 在没有参数的情况下致电apply(df,function(x) x[x>5]) $a = "2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=123"; $b = "2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=12352015-03-26 usr mabdel001c removed device id=814 sn=abcd cmmac=1234 drumac=000"; Echo str_replace($a, "", $b);
  2. 致电one()
  3. $called_from = null中,three(null)成功,因此会调用three
  4. 致电if
    1. 致电two()
    2. one("two")失败,因此three("two")只会返回。
    3. Echo if
  5. Echo three
  6. 由于"done"被调用两次,它会两次回复"done"