Resumo : neste tutorial, você aprenderá sobre o __call()
método mágico do PHP e como usá-lo para agrupar funções existentes.
Introdução ao método mágico PHP __call
O __call()
método é invocado automaticamente quando um método inexistente ou inacessível é chamado. O seguinte mostra a sintaxe do __call()
método:
public __call ( string $name , array $arguments ) : mixed
Linguagem de código: PHP ( php )
O __call()
método aceita dois argumentos:
$name
é o nome do método que está sendo chamado pelo objeto.$arguments
é uma matriz de argumentos passados para a chamada do método.
O __call()
método é útil quando você deseja criar uma classe wrapper que envolva a API existente.
Exemplo de método mágico PHP __call()
Suponha que você queira desenvolver a Str
classe que agrupa funções de string existentes, como strlen()
, strtoupp()
, strtolower()
, etc.
Normalmente, você pode definir o método explicitamente como comprimento, superior, inferior,… Mas você pode utilizar o __call()
método mágico para tornar o código mais curto.
O seguinte define a classe Str que usa o __call()
método mágico:
<?php
class Str
{
private $s = '';
private $functions = [
'length' => 'strlen',
'upper' => 'strtoupper',
'lower' => 'strtolower'
// map more method to functions
];
public function __construct(string $s)
{
$this->s = $s;
}
public function __call($method, $args)
{
if (!in_array($method, array_keys($this->functions))) {
throw new BadMethodCallException();
}
array_unshift($args, $this->s);
return call_user_func_array($this->functions[$method], $args);
}
}
Linguagem de código: HTML, XML ( xml )
Como funciona.
A $functions
propriedade armazena o mapeamento entre os métodos e a função de string integrada. Por exemplo, se você chamar o length()
método, o __call()
método chamará a strlen()
função.
Quando você chama um método em um objeto da classe Str e esse método não existe, por exemplo, length()
, o PHP invocará o __call()
método.
O __call()
método gerará um BadMethodCallException
se o método não for suportado. Caso contrário, adicionará a string à lista de argumentos antes de chamar a função correspondente.
O seguinte mostra como usar a Str
classe:
<?php
require 'Str.php';
$s = new Str('Hello, World!');
echo $s->upper() . '<br>'; // HELLO, WORLD!
echo $s->lower() . '<br>'; // hello, world!
echo $s->length() . '<br>'; // 13
Linguagem de código: HTML, XML ( xml )
Saída:
HELLO, WORLD!
hello, world!
13
Resumo
- O
__call()
método é invocado automaticamente quando um método inexistente ou inacessível é chamado. - Use o
__call()
método para agrupar a API existente em uma classe.