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
$f
e inicialize seu valor na'strlen'
string literal. - Segundo, use the
$f
como 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:5
Linguagem 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 this
palavra-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
Str
classe 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 oformat
argumento não for um dos nomes de método: inferior, superior e título, oconvert()
método gerará uma exceção. Caso contrário, ele chamará o método correspondentelower()
ouupper()
.title()
O seguinte mostra como usar o convert()
método da Str
classe:
<?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 Str
classe possui um construtor que aceita uma string. Ele implementa o toString()
método que converte a Str
instância em uma string.
A Str
classe possui o compare()
método estático que compara duas instâncias da Str
classe. 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); // 0
Linguagem 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.