PHP类以了解在该类中调用了什么方法

PHP类以了解在该类中调用了什么方法,php,oop,Php,Oop,假设我们有课 class foo{ } 而且它没有方法 但在代码的某个地方,一些genius开发人员调用了该类,并将其如下使用: $x = new foo(); $x->run(); 我们的类中没有运行任何方法,但是这个foo类是否可以知道一些称为方法的代码正在运行?您可以给调用不存在的方法时调用的类a: class foo{ function __call($method, $params) { echo "Non extisent method $method is

假设我们有课

class foo{

}
而且它没有方法 但在代码的某个地方,一些genius开发人员调用了该类,并将其如下使用:

$x = new foo();
$x->run();
我们的类中没有运行任何方法,但是这个foo类是否可以知道一些称为方法的代码正在运行?

您可以给调用不存在的方法时调用的类a:

class foo{
  function __call($method, $params) {
    echo "Non extisent method $method is called";
  }

}

我很确定你要找的是神奇的方法。其定义如下:

__调用对象上下文中不可访问的方法时触发调用

此时,您可以处理调用的动态处理

class Dog
{
    function __call($method, $params)
    {
        echo("Sorry, this dog cant " . $method);
    }
}

$bulldog = new Dog();
$bulldog->run();
产出:
很抱歉,这只狗不能运行

我认为

调用此方法的代码将引发错误,然后您将知道它发生在哪里。除此之外,拥有一个没有任何方法的类还有什么意义呢。虽然它可以包含更多的信息,但问题本身是有效的,从答案来看,甚至是有用的。哇,太棒了!如果我有一个私有属性private$engine=;在foo构造函数$this->engine=newotherclass中;如何$this->engine->{$method}$params?在电话里?@Ronan:你可能想尝试一些与你刚才键入的内容非常相似的东西或者调用_user_func_arrayarray$this->engine,$method,$params;如果要单独传递参数,请单击此处。差不多了{编辑}正是这样:@赵:我需要完成很多代码才能尝试去做,我想我只需要写一个测试代码,但是我太懒了。他说:p我希望这个理论能奏效@罗南无意冒犯,但不管你在那里做什么:你做错了。这使得测试变得困难。除此之外,没有方法的类没有责任,也不应该存在。