Можно ли «избежать» имени метода в PHP, чтобы иметь возможность иметь имя метода, которое конфликтует с зарезервированным ключевым словом? - PullRequest
4 голосов
/ 20 февраля 2010

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 12 ноября 2012

Вы можете использовать метод __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();
    }
}
3 голосов
/ 20 февраля 2010

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

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

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

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

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

...