Aufrufmethode von Objekt von Objekt mit call_user_func

Lesezeit: 1 Minute

Benutzer-Avatar
stac

Betrachten Sie dieses einfache Szenario:

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

Lösung:

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

Betrachten Sie dieses Szenario:

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

Sollte diese Lösung funktionieren?

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

Oder sollte das funktionieren?

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

Bearbeiten: Funktioniert Try/Catch für SOAP-Ausnahmen, Trigger bei Verwendung von call_user_func?

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

  • Ich schätze, dies ist eine Frage-Antwort-Site … aber die Idee, beide Lösungen auszuführen, um zu sehen, welche funktioniert, ist Ihnen nie in den Sinn gekommen?

    – Mario

    11. Juni 2009 um 13:24 Uhr


  • Es ist eine von SO gesponserte Testfrage, und Sie haben mehrere Möglichkeiten. Antworten sollten die Buchstaben A, B oder C haben.

    – Jhourlad Estrella

    2. September 2013 um 5:19 Uhr


Das sollte funktionieren:

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

Das erste Argument ist a Callback-Typdie eine Objektreferenz und einen Methodennamen enthält.

  • Um die Argumente automatisch zu übergeben, können Sie verwenden func_get_args(). Zum Beispiel: call_user_func_array(array($this,'method'), func_get_args())

    – Andy Fleming

    5. April 2014 um 23:02 Uhr


Benutzer-Avatar
Entwickler

Hier ist eine Hack-Variante, die für jemanden nützlich sein könnte:

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

Dies verwendet die PHP-Variable-Variablen. Hässlich wie die Hölle, aber nicht besonders hässlicher als die anderen …

1179520cookie-checkAufrufmethode von Objekt von Objekt mit call_user_func

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy