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

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

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

Вы можете использовать __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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top