是否可以在PHP 5.3中使用new作为方法名称?

时间:2010-11-27 12:12:27

标签: php namespaces

我嫉妒Ruby,他们使用“新”作为一种方法。是否可以使用命名空间在PHP 5.3中实现这一点?

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

4 个答案:

答案 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,接口和特征。

  

现在允许全局保留字作为类,接口和特征中的属性,常量和方法名称。 ......

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