Возможно ли “экранировать” имя метода в PHP, чтобы иметь возможность иметь имя метода, которое конфликтует с зарезервированным ключевым словом?
-
21-09-2019 - |
Вопрос
Я делаю 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 не предоставляет метода для экранирования имен функций.
Если вам нужен "пользовательский" способ обойти это, ознакомьтесь с этим комментарием:
Другие советы
Вы можете использовать __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();
}
}