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

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

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

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

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

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


person Daniel Magliola    schedule 20.02.2010    source источник


Ответы (2)


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

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

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

Если вам нужен «определяемый пользователем» способ обойти это, ознакомьтесь с этим комментарием:

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

person Tyler Carter    schedule 20.02.2010
comment
Спасибо! Эта статья на PHP.net подтверждает это. К сожалению, это не работает с CakePHP, который, вероятно, перечисляет все методы Контроллера, а не просто пытается его вызвать. Ну что ж, поехали искать синонимы в список :-) - person Daniel Magliola; 20.02.2010

Вы можете использовать __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();
    }
}
person Vitaliy    schedule 12.11.2012