Pregunta php is_function () para determinar si una variable es una función


Estaba muy emocionado de leer sobre funciones anónimas en php, que le permite declarar una variable que es función más fácil de lo que podría hacer con create_function. Ahora me pregunto si tengo una función a la que se le pasa una variable, ¿cómo puedo verificarla para determinar si se trata de una función? Todavía no hay una función is_function (), y cuando hago un var_dump de una variable que es una función ::

$func = function(){
    echo 'asdf';
};
var_dump($func);

Entiendo esto:

object(Closure)#8 (0) { } 

¿Alguna idea sobre cómo verificar si esta es una función?


73
2018-05-14 16:03


origen


Respuestas:


Utilizar is_callable para determinar si una variable dada es una función. Por ejemplo:

$func = function()
{  
    echo 'asdf';  
};

if( is_callable( $func ) )
{
    // Will be true.
}

113
2018-05-14 16:09



Puedes usar function_exists para verificar que hay una función con el nombre de pila. Y para combinar eso con funciones anónimas, intente esto:

function is_function($f) {
    return (is_string($f) && function_exists($f)) || (is_object($f) && ($f instanceof Closure));
}

29
2018-05-14 16:05



Si solo desea comprobar si una variable es una función anónima y no una cadena o matriz invocable, utilice instanceof.

$func = function()
{  
    echo 'asdf';  
};

if($func instanceof Closure)
{
    // Will be true.
}

Las funciones anónimas (del tipo que se agregó en PHP 5.3) son siempre instancias del Closure clase, y cada instancia de la Closure clase es una función anónima.

Hay otro tipo de cosa en PHP que podría considerarse una función, y eso son objetos que implementan __invoke método mágico Si desea incluirlos (sin excluir cadenas y matrices), use method_exists($func, '__invoke'). Esto incluirá cierres, ya que los cierres implementan __invoke por consistencia.


20
2017-12-12 23:50



function is_function($f) {
    return is_callable($f) && !is_string($f);
}

0
2017-09-27 12:03