(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
is_callable — Verifica se um valor pode ser chamado como uma função a partir do escopo atual
Verifica se o valor informado em value
é do tipo callable,
ou se pode ser chamado usando a função
call_user_func().
value
O valor a ser verificado.
syntax_only
Se definido para true
a função apenas verifica se
value
pode ser uma função ou método. Ela irá
rejeitar quaisquer valores que não sejam objetos chamáveis,
Closure, strings ou arrays que não tenham
uma estrutura válida para ser usado como uma função de retorno. Um array chamável válido
tem 2 entradas, a primeira delas é um objeto
ou uma string, e a segunda uma string.
callable_name
Recebe o "nome da função chamável", por exemplo,
"AlgumaClasse::algumMétodo"
. Observe, entretanto, que embora
a implicação de que AlgumaClasse::algumMétodo()
seja um
método estático chamável, este não é o caso.
Exemplo #1 Verificando se uma string pode ser chamada como uma função
<?php
function someFunction() {}
$functionVariable = 'someFunction';
var_dump(is_callable($functionVariable, false, $callable_name));
var_dump($callable_name);
?>
O exemplo acima produzirá:
bool(true) string(12) "someFunction"
Exemplo #2 Verificando se um array pode ser chamado como uma função
<?php
class SomeClass
{
function someMethod() {}
}
$anObject = new SomeClass();
$methodVariable = [$anObject, 'someMethod'];
var_dump(is_callable($methodVariable, true, $callable_name));
var_dump($callable_name);
?>
O exemplo acima produzirá:
bool(true) string(21) "SomeClass::someMethod"
Exemplo #3 Exemplo de is_callable() e contrutores
Apesar do fato que construtores são métodos que são chamados quando
um objeto é criado, eles não são métodos estáticos e
is_callable() retornará false
para eles. Não é
possível usar is_callable() para verificar se uma classe pode
ser instanciada a partir do escopo atual.
<?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']));
?>
O exemplo acima produzirá:
bool(false) bool(false) bool(true)
true
para qualquer método neste objeto, mesmo se o método não estiver definido.