is_callable
is_callable($value, $syntax_only, $callable_name)
Zwraca true, gdy wartość da się wywołać: nazwa istniejącej funkcji, domknięcie (Closure), para [obiekt, metoda] albo tekst „Klasa::metoda”.
Parametry
- $value – badana wartość.
- $syntax_only – opcjonalny, domyślnie false. Z true sprawdza tylko, czy wartość ma poprawną postać, a nie czy funkcja istnieje.
- $callable_name – opcjonalny, zmienna, do której trafi czytelna nazwa wywoływanej funkcji.
Przykłady
var_dump(is_callable("strlen")); // bool(true)
var_dump(is_callable("missing_function")); // bool(false)
var_dump(is_callable(function () {})); // bool(true)
// metoda obiektu i metoda statyczna
var_dump(is_callable(array(new DateTime(), "format"))); // bool(true)
var_dump(is_callable("DateTime::createFromFormat")); // bool(true)
// konstrukcje językowe nie są funkcjami
var_dump(is_callable("isset")); // bool(false)
var_dump(is_callable("echo")); // bool(false)
// czytelna nazwa wywoływanej funkcji
is_callable(array(new DateTime(), "format"), false, $name);
echo $name; // DateTime::format
Na co uważać
- Nie wywołuj funkcji według nazwy z danych wejściowych, nawet gdy is_callable zwraca true. W ten sposób dałoby się wywołać także system() albo unlink(). Dozwolone nazwy trzymaj na liście i porównuj z nią dane wejściowe.
- isset, empty, echo i inne konstrukcje językowe nie są funkcjami i nie da się ich tak wywołać.
- Przy metodzie prywatnej liczy się, skąd pytasz. Z zewnątrz zwraca false, wewnątrz klasy true.
Powiązane funkcje:
function_exists()
call_user_func()
method_exists()