verificar que metodo method_exist method function_exists function_exist funcion existe exist call_user_func_array php

que - php is method exist



¿Cuál es exactamente la diferencia entre is_callable y function_exists en PHP? (5)

Cuando se usa con una función (no un método de clase) no hay diferencia, excepto que function_exists es un poco más rápido.

Pero cuando se usa para verificar la existencia de métodos en una clase, no se puede usar function_exists . Tendrás que usar is_callable o method_exists .

Estoy trabajando en un proyecto, en el que estoy usando una función obsoleta de la versión anterior. Pero no quiero que mi script se detenga si se usa en la versión anterior. Así que estoy comprobando si la función existe y si no la está creando, de nuevo.

Pero, ¿cuál es la diferencia entre function_exists y is_callable en php y cuál es mejor para el usuario?

if(!is_callable(''xyz'')) { function xyz() { // code goes here } }

O

if(!function_exists(''xyz'')) { function xyz() { // code goes here } }


Cuando se usa en el contexto de la clase, is_callable devuelve true para los métodos de clase accesibles, es decir, métodos públicos, pero method_exists devuelve true para todos los métodos: público, protegido y privado. function_exists hace lo mismo que method_exists fuera de contextos de clase.


La función is_callable acepta no solo nombres de funciones, sino también otros tipos de callbacks de callbacks :

  • Foo::method
  • array("Foo", "method")
  • array($obj, "method")
  • Cierres y otros objetos invocables (PHP 5.3)

Por is_callable tanto, is_callable acepta cualquier cosa por la que pueda pasar call_user_func y family, mientras que function_exists solo le dice si existe una función determinada (no métodos, vea method_exists para eso, ni cierres).

Dicho de otra manera, is_callable es un contenedor para zend_is_callable , que maneja variables con la devolución de llamada de pseudo tipo, mientras que function_exists solo realiza una búsqueda de tabla hash en la tabla de funciones.


Si existe una función Plop , function_exists("Plop") devolverá verdadero.

Ver function_exists

Si una variable es llamable, is_callable($var) devolverá true.
Ahora, esto podría significar que $var es un nombre de función.
Pero también podría ser un combo de nombre de objeto y método.

Ver is_callable


Una más diferente:

Si tiene una clase que usa el método mágico __call , el método is_callable($object, $method) siempre devolverá verdadero para cualquier cosa porque __call básicamente acepta todos los nombres de métodos. Y como ya sabrá, method_exists devolverá false para esto si el método no está definido en la clase.

Esto es especialmente molesto si usas la clase Model CakePHP cuando implementaron el método mágico __call para proporcionar consultas mágicas, pero no está bien si quieres que el método esté completamente definido.