reemplazo recomendado para call_user_method obsoleto?
-
13-09-2019 - |
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?
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()
ycall_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));