Я хотел бы создать функцию «new» и класс «case».
Могу ли я сделать это в PHP?
Нет , ты не можешь . Слава Богу.
На самом деле, хотя определение такого метода приводит к ошибке синтаксического анализа, использование его не делает, что позволяет использовать некоторые обходные пути:
class A { function __call($method, $args) { if ($method == 'new') { // ... } } } $a = new A; $a->new(); // works!
Связанный запрос функции, относящийся к 2004 году, по-прежнему открыт.
Начиная с PHP 7, теперь можно назвать ваши методы с использованием ключевых слов, которые были ограничены до сих пор, благодаря Context Sensitive Lexer :
class Foo { public function new() {} public function list() {} public function foreach() {} }
Тем не менее, вы все еще не можете назвать свой класс Case
я боюсь.
Вы не можете этого сделать, альтернативным вариантом является просто использовать _case () или _new () в качестве имен функций
Также проверьте:
Возможно ли «избежать» имени метода в PHP, чтобы иметь имя метода, которое сталкивается с зарезервированным ключевым словом?
По умолчанию это невозможно, они зарезервированные слова, и вы не можете их использовать.
http://www.php.net/manual/en/reserved.keywords.php
Может быть, вы можете перекомпилировать PHP или что-то подобное для достижения своей цели, но я думаю (как другие люди, которые ответили вам), что это не очень хорошая идея 🙂
НТН!
В соответствии с тем, что упоминал Бенджамин, есть интересное использование «клона», (зарезервированного) в этом классе , строка 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); } }