2009-06-11 13 views
22

consideran que este escenario simple:método de objeto del objeto con call_user_func llamando

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

Solución:

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

Considere este escenario:

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

En caso de que esta solución funcione?

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

¿O debería hacer esto?

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

Editar: Se intentará/catch trabaja para una excepción SOAP, Triger durante el uso de call_user_func?

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

Creo que este es un sitio de pregunta/respuesta ... ¿pero la idea de ejecutar ambas soluciones para ver cuál funciona nunca se te ocurrió? – Mario

+0

Es una pregunta de prueba patrocinada por SO, y usted tiene múltiples opciones. Las respuestas deben ser en forma de letras A, B o C. –

Respuesta

54

esto debería funcionar:

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

El primer argumento es un callback type, que contiene una referencia de objeto y un nombre de método.

+1

Para pasar los argumentos automáticamente puede usar 'func_get_args()'. Por ejemplo: 'call_user_func_array (array ($ this, 'method'), func_get_args())' – DesignerGuy

5

Aquí es una variante hacker, podría ser útil a alguien:

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

Este utiliza las variables de PHP-variables. Feo como el infierno, pero no particularmente más feo que los otros ...

Cuestiones relacionadas