Resumo : neste tutorial, você aprenderá como usar a method_exists()
função PHP para verificar se uma classe ou objeto de uma classe possui um método especificado.
Introdução à função PHP method_exists
A method_exists()
função retorna true
se um objeto ou classe tiver um método especificado. Caso contrário, ele retorna false
.
A sintaxe da method_exists()
função é a seguinte:
method_exists(object|string $object_or_class, string $method): bool
Linguagem de código: PHP ( php )
O method_exists()
tem dois parâmetros:
$object_or_class
é um objeto ou classe na qual você deseja verificar se existe um método.$method
é uma string que representa o método a ser verificado.
Exemplos de funções PHP method_exists
Vejamos alguns exemplos de uso da method_exists()
função.
1) Usando a função PHP method_exists() para verificar se uma classe possui um método
O exemplo a seguir usa a method_exists()
função para verificar se existe um método na BankAccount
classe:
<?php
class BankAccount
{
public function transferTo(BankAccount $other, float $amount)
{
// more code
}
}
$exists = method_exists(BankAccount::class, 'transferTo');
var_dump($exists); // bool(true)
$exists = method_exists(BankAccount::class, 'deposit');
var_dump($exists); // bool(false)
Linguagem de código: PHP ( php )
Neste exemplo, a seguinte instrução é retornada true
porque o transferTo
método existe na BankAccount
classe:
method_exists(BankAccount::class, 'transferTo');
Linguagem de código: PHP ( php )
No entanto, a instrução a seguir é retornada false
porque o deposit
método não existe na BankAccount
classe:
method_exists(BankAccount::class, 'deposit');
Linguagem de código: PHP ( php )
2) Usando a função PHP method_exists para verificar se um objeto possui um método
O exemplo a seguir cria um novo objeto BankAccount
e usa a method_exists()
função para verificar se o objeto possui um método especificado:
<?php
class BankAccount
{
public function transferTo(BankAccount $other, float $amount)
{
// more code
}
}
$account = new BankAccount();
$exists = method_exists($account, 'transferTo');
var_dump($exists); // bool(true)
$exists = method_exists($account, 'deposit');
var_dump($exists); // bool(false)
Linguagem de código: PHP ( php )
O $account
objeto possui o transferTo
método, portanto, a seguinte instrução retorna true
:
method_exists($account, 'transferTo');
Linguagem de código: PHP ( php )
Por outro lado, o objeto $account não possui o deposit
método. Portanto, a seguinte instrução retorna false
:
method_exists($account, 'deposit');
Linguagem de código: PHP ( php )
3) Usando a função method_exists para verificar se um objeto possui um método estático
O method_exists()
também retorna true
se uma classe tiver um método estático . Por exemplo:
<?php
class BankAccount
{
public function transferTo(BankAccount $other, float $amount)
{
// more code
}
public static function compare(BankAccount $other): bool
{
// implementation
// ...
return false;
}
}
$exists = method_exists(BankAccount::class, 'compare');
var_dump($exists); // bool(true)
$account = new BankAccount();
$exists = method_exists($account, 'compare');
var_dump($exists); // bool(true)
Linguagem de código: PHP ( php )
O BankAccount
tem o compare
método estático, então a seguinte instrução retorna true
:
method_exists(BankAccount::class, 'compare');
Linguagem de código: PHP ( php )
O $account
é uma instância da BankAccount
classe que possui o compare
método estático, a seguinte expressão também retorna true
:
$exists = method_exists($account, 'compare');
Linguagem de código: PHP ( php )
Função PHP method_exists em estruturas MVC
O method_exists()
método é frequentemente usado em estruturas Model-View-Controller (MVC) para verificar se uma classe de controlador possui um determinado método antes de chamá-lo.
Por exemplo, suponha que você tenha o seguinte URI de solicitação:
/posts/edit/1
Linguagem de código: PHP ( php )
Este URI tem três partes: posts, edit e 1.
- Os
posts
mapas para aPostsController
turma. - O
edit
mapeia oedit
método da classe. - O número
1
é o ID da postagem a ser editada.
A PostsController
classe ficará assim:
<?php
class PostsController
{
public function edit(int $id)
{
// show the edit post form
}
}
Linguagem de código: PHP ( php )
E você usa a method_exists()
função para verificar se o método de edição existe no $controller
objeto assim:
<?php
// ...
if(method_exists($controller, $action))
{
$controller->$action($id);
}
Linguagem de código: PHP ( php )
Resumo
- Use a função PHP
method_exists()
para verificar se um objeto ou classe possui um método especificado.