Могу ли я использовать зарезервированные имена PHP для своих функций и классов?
Я хотел бы создать функцию с именем "new" и класс с именем "case".
Могу ли я сделать это на PHP?
5 ответов
На самом деле, определение такого метода приводит к ошибке синтаксического анализа, а его использование - нет, что допускает некоторые обходные пути:
class A {
function __call($method, $args) {
if ($method == 'new') {
// ...
}
}
}
$a = new A;
$a->new(); // works!
Запрос о связанных функциях, начиная с 2004 года, все еще открыт.
Редактировать январь 2016
Начиная с PHP 7, теперь можно называть ваши методы, используя ключевые слова, которые были ограничены до сих пор, благодаря контекстно-зависимому лексеру:
class Foo {
public function new() {}
public function list() {}
public function foreach() {}
}
Вы все еще не можете, однако, назвать свой класс Case
Боюсь.
Вы не можете сделать это, альтернативный вариант - просто использовать _case() или _new() в качестве имен функций.
Также проверьте:
По умолчанию это невозможно, это зарезервированные слова, и вы не можете их использовать.
http://www.php.net/manual/en/reserved.keywords.php
Может быть, вы можете перекомпилировать PHP или что-то подобное для достижения своей цели, но я думаю (как и другие люди, которые вам ответили), что это не очень хорошая идея:)
НТН!
Я просто переименовал класс, чтобы решить свою проблему.
foreach($array as $key => $line){
if($key == "resource"){
$key = "resources";
$array->$key = $line;
}
}
В соответствии с тем, что упомянул Бенджамин, есть интересное использование слова "клон" (которое зарезервировано) в этом классе, строка 545.
public function __call($method, $args)
{
if ('clone' == $method) {
return call_user_func_array(array($this, 'cloneRepository'), $args);
} else {
$class = get_called_class();
$message = "Call to undefined method $class::$method()";
throw new \BadMethodCallException($message);
}
}