0

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

4

2 回答 2

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();
于 2013-10-22T13:58:55.317 回答
-1

将函数更改为静态:

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

所以你可以这样称呼它:

trololo::log();
于 2013-10-22T13:59:26.680 回答