Можно ли "избежать" имени метода в 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 не предоставляет метод для экранирования имен функций.
Если вы хотите "определенный пользователем" способ обойти это, проверьте этот комментарий:
Ты можешь использовать __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();
}
}