是否可以创建方法的引用?

时间:2013-10-22 13:52:14

标签: php

我有一个基类,所有操作都在其中。在其中一个类方法中,我创建了另一个自己的类的实例,这是一个帮助....在我的基类中我有一个名为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方法吗?

2 个答案:

答案 0 :(得分:4)

您无法将方法与其对象分开。但是,您可以传递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();

答案 1 :(得分:-1)

将功能更改为静态:

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

所以你可以这样称呼它:

trololo::log();