PHP__call

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 ) : mixedLinguagem 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 Strclasse 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 $functionspropriedade 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 BadMethodCallExceptionse 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 Strclasse:

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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *