Можно ли использовать new как имя метода в PHP 5.3?

Я ревную к Ruby с их использованием «нового» как метода. Можно ли достичь этого в PHP 5.3 с использованием пространств имен?

class Foo { public function new() { echo 'Hello'; } } 

Нет. Как уже упоминалось в другом месте, new – это зарезервированное ключевое слово. Попытка использовать его как имя метода приведет к ошибке Parse: «Синтаксическая ошибка, неожиданный T_NEW , ожидающий T_STRING ». Пространства имен не помогут, поскольку new ключевое слово применяется к любому пространству имен. Единственный способ обойти это можно с помощью виртуального метода, например

 /** * @method String new new($args) returns $args */ class Foo { protected function _new($args) { return $args; } public function __call($method, $args) { if($method === 'new') { return call_user_func_array(array($this, '_new'), $args); } else { throw new LogicException('Unknown method'); } } } $foo = new Foo; echo $foo->new('hello'); // return hello echo $foo->boo(); // throws Exception 

Но я бы отговорил это. Все магические методы медленнее, чем прямой вызов методов, и если в простом правиле может быть никакого имени метода new , то просто сделайте это. Используйте синоним.

как вы можете видеть здесь , «новый» находится в списке зарезервированных слов, поэтому вы не можете использовать его для обозначения метода.

Вы не можете использовать любое из следующих слов как константы, имена классов, имена функций или методов

Ну, короткий ответ на это, похоже, нет , поскольку это зарезервированное ключевое слово .

Было бы неплохо иметь доступ к таким классам, но зарезервированные слова важны по какой-то причине. Вместо этого люди используют другие синонимы: create, new, getInstance () [обычно статическое использование] и т. Д.

Да, с PHP7. Но только внутри классов, интерфейсов и черт.

Теперь разрешены глобально зарезервированные слова как имена свойств, констант и методов в классах, интерфейсах и свойствах. …

http://php.net/manual/en/migration70.other-changes.php#migration70.other-changes.loosening-reserved-words