(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
is_callable — Prüft, ob ein Wert als Funktion aus dem aktuellen Bereich aufgerufen werden kann.
Prüft, ob value
ein callable ist oder
mit der Funktion call_user_func() aufgerufen werden kann.
value
Der zu prüfende Wert.
syntax_only
Wenn dieser Parameter auf true
gesetzt wird, prüft die Funktion nur,
ob value
eine Funktion oder Methode sein könnte.
Es werden alle Werte zurückgewiesen, die keine
invocable Objekte,
Closures, Strings oder Arrays sind, die nicht
die richtige Struktur haben, um als Callback verwendet werden zu können.
Ein gültiges Callable-Array hat 2 Einträge, wobei der erste ein Objekt
oder ein String und der zweite ein String ist.
callable_name
Hier wird der "aufrufbare Name" abgelegt, z. B.
"SomeClass::someMethod"
. Es ist jedoch zu beachten,
dass trotz der Implikation, dass
SomeClass::someMethod()
eine aufrufbare statische
Methode ist, dies nicht der Fall ist.
Beispiel #1 Prüfent, ob eine Zeichenkette als Funktion aufgerufen werden kann
<?php
function someFunction() {}
$functionVariable = 'someFunction';
var_dump(is_callable($functionVariable, false, $callable_name));
var_dump($callable_name);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) string(12) "someFunction"
Beispiel #2 Prüfent, ob ein Array als Funktion aufgerufen werden kann
<?php
class SomeClass
{
public function someMethod() {}
}
$anObject = new SomeClass();
$methodVariable = [$anObject, 'someMethod'];
var_dump(is_callable($methodVariable, true, $callable_name));
var_dump($callable_name);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(true) string(21) "SomeClass::someMethod"
Beispiel #3 is_callable() und Konstruktoren
Obwohl Konstruktoren die Methoden sind, die aufgerufen werden, wenn ein
Objekt erzeugt wird, sind sie keine statischen Methoden und
is_callable() gibt false
für sie zurück. Es ist nicht
möglich, mit is_callable() zu prüfen, ob eine Klasse
aus der aktuellen Domäne instanziiert werden kann.
<?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']));
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false) bool(false) bool(true)
true
zurückgeben, auch wenn die Methode nicht definiert ist.