Нет.Как уже указывалось в другом месте, new
является зарезервированным ключевым словом.Попытка использовать его в качестве имени метода приведет к ошибке синтаксического анализа: «синтаксическая ошибка, неожиданная 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
, так и будет.Используйте синоним.