(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
is_callable — Détermine si une valeur peut être appelé comme une fonction dans la portée courante
Vérifie que value
est un callable,
ou qu'il peut être appelé à l'aide de la fonction
call_user_func().
value
La valeur à vérifier.
syntax_only
Si l'argument syntax_only
vaut true
, la
fonction ne va vérifier que si value
peut être
une fonction ou une méthode. Il rejettera toutes les valeurs
qui ne sont pas des objets invocables,
des Closure, des chaîne de caractèress, ou des tableaus qui n'ont pas
une structure valide pour être utilisées comme un callback. Un tableau appelable valide
contient 2 entrées : la première doit être un objet
ou une chaîne de caractères, et la seconde une chaîne de caractères.
callable_name
Reçoit le "nom de la fonction callable", par exemple
"SomeClass::someMethod"
. Notez cependant que,
malgré l'implication selon laquelle SomeClass::someMethod()
est une méthode statique callable, ce n'est pas le cas.
Exemple #1 Vérification si une chaîne peut être appelée comme une fonction
<?php
function someFunction() {}
$functionVariable = 'someFunction';
var_dump(is_callable($functionVariable, false, $callable_name));
var_dump($callable_name);
?>
L'exemple ci-dessus va afficher :
bool(true) string(12) "someFunction"
Exemple #2 Vérification si un tableau peut être appelé comme une fonction
<?php
class someClass
{
public function someMethod() {}
}
$anObject = new SomeClass();
$methodVariable = [$anObject, 'someMethod'];
var_dump(is_callable($methodVariable, true, $callable_name));
var_dump($callable_name);
?>
L'exemple ci-dessus va afficher :
bool(true) string(21) "SomeClass::someMethod"
Exemple #3 is_callable() et les constructeurs
Malgré le fait que les constructeurs sont les méthodes qui sont appelées lorsqu'un objet est créé,
ils ne sont pas des méthodes statiques et
is_callable() retournera false
pour eux. Il n'est pas
possible d'utiliser is_callable() pour vérifier si une classe peut
être instanciée depuis la portée actuelle.
<?php
class Foo
{
public function __construct() {}
public function foo() {}
}
var_dump(
is_callable(['Foo', '__construct']),
is_callable(['Foo', 'foo'])
);
$foo = new Foo();
var_dump(is_callable([$foo, '__construct']));
?>
L'exemple ci-dessus va afficher :
bool(false) bool(false) bool(true)
true
pour n'importe quelle méthode sur cet object, même si
la méthode n'est pas définie.