É possível "escapar" de um nome de método no PHP, poder ter um nome de método que coloque com uma palavra -chave reservada?

StackOverflow https://stackoverflow.com/questions/2302771

Pergunta

Estou fazendo MVC no PHP e gostaria de ter um método List () dentro do meu controlador, para ter o URL/entidade/list/parent_id, para mostrar todo o "X" que pertence a esse pai.

No entanto, não posso ter um método chamado List (), pois é uma palavra -chave reservada ao PHP.

No VB.NET, por exemplo, se eu precisar ter algo com um nome que se choca com uma palavra -chave reservada, posso envolvê -lo em [Reservverv_Name].
No SQL, você pode fazer a mesma coisa.
Em MySQL, você usa o backtick `

Existe alguma sintaxe no PHP que especifica "tratar isso como um identificador, não como uma palavra -chave"?

(Nota: eu sei que posso usar rotas para fazer isso sem ter um método List (). Eu também posso simplesmente chamar a ação de outra coisa. A questão é se o PHP fornece esse tipo de fuga)

Foi útil?

Solução

Com nomes de variáveis, você pode usar os sinais de suporte:

${'array'} = "test";
echo ${'array'};

Mas o PHP não fornece um método para escapar nomes de funções.

Se você deseja uma maneira 'definida pelo usuário' de contornar isso, confira este comentário:

http://www.php.net/manual/en/reserved.keywords.php#93368

Outras dicas

Você pode usar __call() método para invocar privado ou público _list() método que implementa sua funcionalidade.

/**
 * This line for code assistance
 * @method  array list() list($par1, $par2) Returns list of something. 
 */
class Foo 
{
    public function __call($name, $args) 
    {
        if ($name == 'list') {
            return call_user_func_array(array($this, '_list'), $args);
        }
        throw new Exception('Unknown method ' . $name . ' in class ' . get_class($this));
    }

    private function _list($par1, $par2, ...)
    {
        //your implementation here
        return array();
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top