是否可以确定方法是从类的内部还是外部调用的?

时间:2011-07-04 17:45:16

标签: php oop

示例代码:

class MyClass {
    function echo_msg {
        echo // now what...
    }

    function echo_from_inside {
        $this->echo_msg()
    }
}

result should be:

$my_instance = new MyClass();
$my_instance->echo_msg(); // I was called from OUTside
$my_instance->echo_from_inside(); // I was called from INside

3 个答案:

答案 0 :(得分:3)

使用公共函数包装私有函数可能更容易,而不是从函数调用中检测。像这样:

class MyClass{
  private function myob(){
    //do something
  }

  public function echo_msg(){
    $this->myob();
    //do other stuff like set a flag since it was a public call
  }

  private function foo(){ //some other internal function
    //do stuff and call myob
    $this->myob();
  }
}

$obj=new MyClass();
$obj->echo_msg();//get output
$obj->myob();  //throws error because method is private

答案 1 :(得分:2)

您可以尝试获取方法的调用者:

$trace = debug_backtrace();
$caller = array_shift($trace);
echo 'called by '.$caller['function']
echo 'called by '.$caller['class']

这对你有用。

答案 2 :(得分:0)

您可以添加如下可选参数:

function echo_msg($ins=false) {
        if($ins){/*called from inside*/}else{/*called from outside*/}
        echo // now what...
    }

然后离开那最后。如果你是从课堂内调用它,请传递它true,否则不传递任何内容!