Funções variáveis ​​PHP

Resumo : neste tutorial, você aprenderá sobre as funções variáveis ​​​​do PHP e como usá-las para chamar uma função, um método de um objeto e um método estático de uma classe.

Introdução às funções variáveis ​​​​do PHP

Funções variáveis ​​permitem que você use uma variável como uma função . Quando você acrescenta parênteses ()a uma variável, o PHP irá procurar a função cujo nome é igual ao valor da variável e executá-la. Por exemplo:

<?php

$f = 'strlen';
echo $f('Hello');Linguagem de código:  HTML, XML  ( xml )

Saída:

5

Como funciona.

  • Primeiro, defina uma variável $fe inicialize seu valor na 'strlen'string literal.
  • Segundo, use the $fcomo uma função passando a string 'Hello'para ele.

Quando o PHP vê $f(), ele procura a strlen()função. Como the strlen()é uma função integrada, o PHP apenas a invoca.

Se o PHP não conseguir encontrar o nome da função, ocorrerá um erro. Por exemplo:

<?php

$f = 'len';
echo $f('Hello');Linguagem de código:  HTML, XML  ( xml )

Erro:

Fatal error: Uncaught Error: Call to undefined function len() in index.php:5Linguagem de código:  texto simples  ( texto simples )

Neste exemplo, como o PHP não consegue encontrar a função len(), ele gera um erro.

Mais exemplos de funções variáveis

Vejamos alguns exemplos de uso de funções variáveis.

1) Usando funções variáveis ​​para chamar um exemplo de método

As funções variáveis ​​permitem chamar os métodos de um objeto . A sintaxe para chamar um método usando uma função variável é a seguinte:

$this->$variable($arguments)Linguagem de código:  PHP  ( php )

Observe que você precisa prefixar o nome da variável com o $sinal. Neste caso, você terá o $sinal antes da thispalavra-chave e do nome da variável. Por exemplo:

<?php

class Str
{
	private $s;

	public function __construct(string $s)
	{
		$this->s = $s;
	}

	public function lower()
	{
		return mb_strtolower($this->s, 'UTF-8');
	}

	public function upper()
	{
		return mb_strtoupper($this->s, 'UTF-8');
	}

	public function title()
	{
		return mb_convert_case($this->s, MB_CASE_TITLE, 'UTF-8');
	}

	public function convert(string $format)
	{
		if (!in_array($format, ['lower', 'upper', 'title'])) {
			throw new Exception('The format is not supported.');
		}

		return $this->$format();
	}
}Linguagem de código:  HTML, XML  ( xml )

Como funciona:

  • Primeiro, defina uma Strclasse que tenha três métodos para converter uma string em minúsculas, maiúsculas e maiúsculas.
  • Segundo, defina o convert()método que aceita uma string. Se o formatargumento não for um dos nomes de método: inferior, superior e título, o convert()método gerará uma exceção. Caso contrário, ele chamará o método correspondente lower()ou upper().title()

O seguinte mostra como usar o convert()método da Strclasse:

<?php
require_once 'Str.php';

$str = new Str('Hello there');

echo $str->convert('title');Linguagem de código:  HTML, XML  ( xml )

Saída:

Hello There

2) Usando funções variáveis ​​para chamar um exemplo de método estático

O exemplo a seguir usa uma função variável para chamar um método estático :

<?php

class Str
{
	private $s;

	public function __construct(string $s)
	{
		$this->s = $s;
	}

	public function __toString()
	{
		return $this->s;
	}

	public static function compare(Str $s1, Str $s2)
	{
		return strcmp($s1, $s2);
	}
}Linguagem de código:  HTML, XML  ( xml )

A Strclasse possui um construtor que aceita uma string. Ele implementa o toString()método que converte a Strinstância em uma string.

A Strclasse possui o compare()método estático que compara duas instâncias da Strclasse. Para chamar o compare()método estático usando uma função variável, use o seguinte:

$str1 = new Str('Hi');
$str2 = new Str('Hi');

$action = 'compare';

echo Str::$action($str1, $str2); // 0Linguagem de código:  PHP  ( php )

Resumo

  • Acrescente parênteses () ao nome de uma variável para chamar a função cujo nome é igual ao valor da variável.
  • Use o $this->$variable()para chamar um método de uma classe.
  • Use o className::$variable()para chamar um método estático de uma classe.

Deixe um comentário

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