是否可以创建对该方法的引用


Is it possible to create reference to the method?

我有一个基类,所有操作都在进行。在其中一个类方法中,我创建了我自己的另一个类的实例,这是一个帮手。在我的基类中,我有一个名为 log 的方法 - 此方法的目的很明显。那么是否有可能以某种方式向帮助程序类提供对基类日志方法的直接引用?

目前我有这样的东西:

class trololo {
    public function log(){
        echo __CLASS__ . ' => ' . __FUNCTION__ ."<br>'n";
    }
    private function three(){}
}
class test {
    function __construct(&$data){
        $data->log();
    }
}
class lol extends trololo {
    private function one(){}
    protected function two(){}
    public function four(){
        $this->log();
        new test($this);
    }
}
$lol = new lol;
$lol->four();

但如您所见,我将完整的 lol 对象传递给测试类,但是否可以只传递log方法?

不能将方法与其对象分开。但是,您可以通过callable

class Foo {
    public function bar() { echo 'bar'; }
}
$ref = array(new Foo, 'bar');
$ref();

从 PHP 5.4 开始工作,在您需要 call_user_func($ref) 而不是 $ref() 之前。

或者,使用匿名函数:

class Foo {
    public function bar() { echo 'bar'; }
}
$foo = new Foo;
$ref = function () use ($foo) { return $foo->bar(); };
$ref();

将函数更改为静态:

public static function log(){
    echo __CLASS__ . ' => ' . __FUNCTION__ ."<br>'n";
}

所以你可以这样称呼它:

trololo::log();