Pregunta

A partir de PHP de call_user_method() y call_user_method_array() están marcados dEPRECATED me pregunto qué alternativa se recomienda?

Una forma sería usar call_user_func() , ya que al dar una matriz con un objeto y un nombre de método como primer argumento hace lo mismo como las funciones obsoletas. Dado que no se marca esta función está desfasada y supongo que la razón no es el uso no POO-elegante de ellos?

La otra manera en que puedo pensar en está utilizando el Reflexión API, que podría ser la alternativa más cómoda y orientada al futuro. Sin embargo, es más código y pude imagen que es más lento que el uso de las funciones mencionadas anteriormente.

Lo que me interesa:

  • ¿Hay una técnica completamente nueva para llamar métodos de un objeto por su nombre?
  • ¿Cuál es el mejor reemplazo rápido / / oficial?
  • ¿Cuál es la razón de desaprobación?
¿Fue útil?

Solución

Como usted ha dicho call_user_func puede duplicar fácilmente el comportamiento de esta función. ¿Cuál es el problema?

La página call_user_method incluso enumera como la alternativa:

<?php
call_user_func(array($obj, $method_name), $parameter /* , ... */);
call_user_func(array(&$obj, $method_name), $parameter /* , ... */); // PHP 4
?>

En lo que a ¿Por qué esta desfasada, esta publicación explica que:

  

Este es   porque las funciones call_user_method() y call_user_method_array()   puede ser fácilmente duplicada por:

     

manera antigua:
  call_user_method($func, $obj, "method", "args", "go", "here");

     

nueva forma:
  call_user_func(array(&$obj, "method"), "method", "args", "go", "here");

En lo personal, probablemente me voy con la sugerencia de las variables variables publicado por Chad.

Otros consejos

Usted puede hacerlo usando variables variables , esto parece el más limpio a mi. En lugar de:

call_user_func(array($obj, $method_name), $parameter);

Lo haces:

$obj->{$method_name}($parameter);

hacer algo así:

Yo uso algo así en mi método __construct ().

$params = array('a','b','c'); // PUT YOUR PARAMS IN $params DYNAMICALLY

call_user_func_array(array($this, $this->_request), array($params));

primero argumento: obect ejemplo, Segundo argumento: método para llamar, 3er argumento: params

Antes de comprobar si el método o clase también, con:

method_exists()
class_exists()

Saludos

si recibe el error siguiente: Advertencia: call_user_func () espera parámetro de 1 a ser una devolución de llamada válida, segundo miembro de la matriz no es un método válido en C: \ www \ archivo.php en la línea X y el código de la siguiente manera:

call_user_func(array($this, $method));

uso (cadena) Declaración de $ nombre del método

call_user_func(array($this, (string)$method));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top