(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
is_callable — Проверяет, доступно ли значение для вызова как функция в текущей области видимости
Функция проверяет, принадлежит ли значение value
типу callable,
или что значение доступно для вызова функцией call_user_func().
value
Значение, которое требуется проверить.
syntax_only
Со значением true
функция проверяет только то,
могло бы значение value
быть функцией или методом.
Функция считает доступными для вызова только а) объекты, в классе которых реализовали магический метод
__invoke, б) объекты класса Closure,
в) строки (string), которые содержат возможное название функции, и г) массив (array),
структура которого соответствует синтаксису callable-выражения для передачи callback-функции.
Корректная структура массива для передачи callback-функции
предполагает только два элемента, первый из которых — объект или строка,
а второй — строка.
callable_name
Аргумент получает значение «вызываемого имени» наподобие "SomeClass::someMethod"
.
Однако обратите внимание, что хотя
вызываемое имя SomeClass::someMethod()
предполагает вызов статического метода,
метод не статический.
Функция возвращает true
, если аргумент value
вызывается как функция,
иначе возвращает false
.
Пример #1 Пример проверки доступности строки для вызова как функции
<?php
function someFunction() {}
$functionVariable = 'someFunction';
var_dump(is_callable($functionVariable, false, $callable_name));
var_dump($callable_name);
?>
Результат выполнения приведённого примера:
bool(true) string(12) "someFunction"
Пример #2 Пример проверки доступности массива для вызова как метода
<?php
class SomeClass
{
function someMethod() {}
}
$anObject = new SomeClass();
$methodVariable = [$anObject, 'someMethod'];
var_dump(is_callable($methodVariable, true, $callable_name));
var_dump($callable_name);
?>
Результат выполнения приведённого примера:
bool(true) string(21) "SomeClass::someMethod"
Пример #3 Функция is_callable() и конструкторы
Конструкторы — методы, которые вызываются, когда
создаётся объект, при этом конструкторы не относятся к статическим методам,
поэтому функция is_callable() вернёт для конструктора значение false
при проверке в статическом контексте.
Функцией is_callable() нельзя проверить, возможно ли создать
экземпляр класса из текущей области видимости.
<?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']));
?>
Результат выполнения приведённого примера:
bool(false) bool(false) bool(true)
true
для произвольного метода объекта, который реализует метод __call(),
даже если метод не определили в классе.