is_callable

(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

Description

is_callable(mixed $value, bool $syntax_only = false, string &$callable_name = null): bool

Vérifie que value est un callable, ou qu'il peut être appelé à l'aide de la fonction call_user_func().

Liste de paramètres

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.

Valeurs de retour

Retourne true si value peut être appelé comme une fonction, false sinon.

Exemples

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)

Notes

  • Un object est tout le temps appelable s'il implémente __invoke(), et que la méthode est visible dans le portée courante.
  • Un nom de classe est appelable si elle implémente __callStatic()
  • Si un object implémente __call(), alors cette fonction retournera true pour n'importe quelle méthode sur cet object, même si la méthode n'est pas définie.
  • Cette fonction peut déclancher l'autochargement si appelé avec le nom d'une classe.

Voir aussi