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()