tutorial - php stringa vuota



php is_function() per determinare se una variabile è una funzione (3)

Sono stato piuttosto entusiasta di leggere le funzioni anonime in php, che ti permettono di dichiarare una variabile che è più facile da create_function rispetto a create_function . Ora mi chiedo se ho una funzione che passa una variabile, come posso controllarla per determinare se si tratta di una funzione? Non esiste ancora una funzione is_function () e quando eseguo un var_dump di una variabile che è una funzione ::

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

Ho capito:

object(Closure)#8 (0) { } 

Qualche idea su come verificare se questa è una funzione?

https://src-bin.com


Answer #1

È possibile utilizzare function_exists per verificare che esista una funzione con il nome specificato. E per combinarlo con le funzioni anonime, prova questo:

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

Answer #2

Se si desidera solo verificare se una variabile è una funzione anonima e non una stringa richiamabile o un array, utilizzare instanceof .

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

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

Le funzioni anonime (del tipo che sono state aggiunte in PHP 5.3) sono sempre istanze della classe Closure e ogni istanza della classe Closure è una funzione anonima.

C'è un altro tipo di cosa in PHP che potrebbe essere considerato una funzione, e questo è gli oggetti che implementano il metodo magico __invoke . Se si desidera includerli (escludendo ancora stringhe e array), utilizzare method_exists($func, '__invoke') . Ciò includerà ancora le chiusure, poiché le chiusure implementano __invoke per coerenza.


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




anonymous-function