0

すべてのアクションが行われる基本クラスが 1 つあります。このクラス メソッドの 1 つで、ヘルパーの一種である他の独自のクラスのインスタンスを作成します。基本クラスには、名前付きlogのメソッドがあります。このメソッドの目的は明らかです。では、基本クラスの 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();

logしかし、ご覧のとおり、lol オブジェクト全体をテスト クラスに渡していますが、メソッドのみを渡すことは可能でしょうか?

4

2 に答える 2

4

メソッドをそのオブジェクトから分離することはできません。ただし、次を渡すことができますcallable

class Foo {
    public function bar() { echo 'bar'; }
}

$ref = array(new Foo, 'bar');
$ref();

call_user_func($ref)の代わりに必要になる前に、PHP 5.4 以降で動作します$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 に答える