2017-01-17 7 views
2

私は、メソッドをクロージャ型に変換する方法はありますか?php - メソッドをクロージャに変換する

class myClass{ 

public function myMethod($param){ 
    echo $param; 
} 

public function myOtherMethod(Closure $param){ 
    // do somthing here ... 
} 
} 

$obj = new myClass(); 
$obj->myOtherMethod((closure) '$obj->myMethod'); 

これは一例ですが、私は呼び出し可能な使用し、[$obj,'myMethod'] 私のクラスは非常に複雑であり、私はちょうど閉鎖タイプのために何を変更カントを使用傾けます。 私はクロージャにメソッドを変換する必要があります。 他の方法がありますか、これを使用する必要がありますか?

$obj->myOtherMethod(function($msg) use($obj){ 
    $obj->myMethod($msg); 
}); 

私は少ないメモリとリソース消費者の方法を使いたいと思っています。そのような解決策はありますか? PHP 7.1以降

+0

'クロージャー 'はパフォーマンス上の問題ではありません。試しに使うことができます。このようにすることが大丈夫です。 – JustOnUnderMillions

+0

「少ないメモリを使う」という小さなメモ。 PHPの '$ var1 = $ var2; 'のすべてのコピーは、内容が変更されない限り、最初は参照です。これは直接コピー '$ var1 = trim($ var2);' – JustOnUnderMillions

+0

ありがとうございます。他の方法はありませんか? –

答えて

0

あなたがすることができます

$method = new ReflectionMethod($obj, 'myMethod'); $closure = $method->getClosure($obj);

しかし、あなたの例MyMethodは(中)が引数を受け入れるので、この閉鎖は次のように呼ばれるべきPHP 5.4以降

$closure = Closure::fromCallable ([$obj, 'myMethod'])

をすることができますこの$closure($msg)

関連する問題