web-dev-qa-db-ja.com

call_user_funcを使用してオブジェクトのオブジェクトのメソッドを呼び出す

この単純なシナリオを考えてみましょう。

$this->method($arg1, $arg2);

解決:

call_user_func_array(array($this,'method'), array($arg1, $arg2));

このシナリオを検討してください。

$this->object->method($arg1, $arg2);

このソリューションは機能する必要がありますか?

call_user_func_array(array($this->object,'method'), array($arg1, $arg2));

それともこれは機能するはずですか?

    call_user_func_array(array($this, 'object','method'), array($arg1, $arg2));

編集:try/catchはSOAP例外、call_user_funcの使用中のトリガーに対して機能しますか?

  try {
    $soap_res = call_user_func_array(array($this->service,'getBanana'), array(0, 10));
} catch (SoapFault $fault) {
    die($fault->faultstring)
} 
26
stac

これは機能するはずです:

call_user_func_array(array($this->object,'method'), array($arg1, $arg2));

最初の引数は コールバックタイプ で、オブジェクト参照とメソッド名が含まれています。

67
Greg

これはハックの変種で、誰かに役立つかもしれません:

$method_name_as_string = 'method_name';
$this->$method_name_as_string($arg1, $arg2);

これはPHP変数変数を使用します。地獄のように醜いですが、他のものより特に醜いわけではありません...

5
devsnd