is_callable

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

Descrição

is_callable(mixed $value, bool $syntax_only = false, string &$callable_name = null): bool

Verifica se um valor é do tipo callable.

Parâmetros

value

O valor a ser verificado

syntax_only

Se definido para true a função apenas verifica se value pode ser uma função o método. Ela irá apenas rejeitar variáveis simples que não sejam strings, ou um array que não tem estrutura válida para ser usado como função de chamada de retorno. Os válidos devem ter apenas 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". No exemplo abaixo é "someClass::someMethod". Note, entretando, que embora a implicação de que someClass::SomeMethod() seja um método estático que pode ser chamado, este não é o caso.

Valor Retornado

Retorna true se value puder ser chamado como função, false caso contrário.

Exemplos

Example #1 Exemplo de is_callable()

<?php
//  Como verificar uma variável para ver se ela pode ser chamada
//  como uma função.

//
//  Variável simples contendo uma função
//

function someFunction()
{
}

$functionVariable = 'someFunction';

var_dump(is_callable($functionVariable, false, $callable_name));  // bool(true)

echo $callable_name, "\n";  // someFunction

//
//  Array contendo um método
//

class someClass {

  function someMethod()
  {
  }

}

$anObject = new someClass();

$methodVariable = array($anObject, 'someMethod');

var_dump(is_callable($methodVariable, true, $callable_name));  //  bool(true)

echo $callable_name, "\n";  //  someClass::someMethod

?>

Example #2 Exemplo de is_callable() e contrutores

is_callable() reporta construtores como métodos que não podem ser chamados.

<?php

class Foo
{
    public function __construct() {}
    public function foo() {}
}

var_dump(
    is_callable(array('Foo', '__construct')),
    is_callable(array('Foo', 'foo'))
);

O exemplo acima produzirá:

bool(false)
bool(false)

Notas

  • Um objeto é sempre chamável se ele implementar o método __invoke(), e este método estiver visível no escopo atual.
  • Um nome de classe é chamável se ela implementa o método __callStatic().
  • Se um objeto implementa o método __call(), então esta função retornará true para qualquer método neste objeto, mesmo se o método não estiver definido.
  • Esta função pode disparar o auto-carregamento se chamada com o nome de uma classe.

Veja Também