Можно ли "избежать" имени метода в PHP, чтобы иметь возможность иметь имя метода, которое конфликтует с зарезервированным ключевым словом?

Я делаю MVC в PHP, и я хотел бы иметь метод list() внутри моего контроллера, чтобы URL /entity/list/parent_id, чтобы показать все "х", которые принадлежат этому родителю.

Однако у меня не может быть метода list(), так как это зарезервированное ключевое слово PHP.

Например, в VB.Net, если мне нужно что-то с именем, которое конфликтует с зарезервированным ключевым словом, я могу обернуть его в [reserved_name].
В SQL вы можете сделать то же самое.
В MySQL вы используете обратную галочку

Есть ли какой-то синтаксис в PHP, который определяет "обрабатывать это как идентификатор, а не как ключевое слово"?

(ПРИМЕЧАНИЕ: я знаю, что могу использовать маршруты, чтобы сделать это, не имея метода list(). Я также могу просто вызвать действие как-нибудь еще. Вопрос в том, обеспечивает ли PHP этот вид экранирования)

2 ответа

Решение

С именами переменных вы можете использовать знаки скобок:

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

Но PHP не предоставляет метод для экранирования имен функций.

Если вы хотите "определенный пользователем" способ обойти это, проверьте этот комментарий:

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

Ты можешь использовать __call() метод для вызова частного или общественного _list() метод, который реализует вашу функциональность.

/**
 * 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();
    }
}
Другие вопросы по тегам