我嫉妒Ruby,他们使用“新”作为一种方法。是否可以使用命名空间在PHP 5.3中实现这一点?
class Foo
{
public function new()
{
echo 'Hello';
}
}
答案 0 :(得分:5)
你可以看到here," new"在保留字的列表中,因此您不能使用它来命名方法。
您不能将以下任何字词用作常量,类名,函数或方法名称
答案 1 :(得分:3)
对此的简短回答似乎是否,因为它是reserved keyword。
在类似的课程中提供这样的课程会很好,但保留的单词很重要。人们倾向于使用其他同义词:create,new,getInstance()[通常是静态用法]等。
答案 2 :(得分:3)
没有。就像其他地方已经指出的那样,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
,那么就是它。使用同义词。
答案 3 :(得分:1)
是的,从PHP7开始。但仅限于classees,接口和特征。
现在允许全局保留字作为类,接口和特征中的属性,常量和方法名称。 ......