2010-11-27 8 views

Répondre

3

Non. Comme déjà indiqué ailleurs, new est un mot-clé réservé. Essayer de l'utiliser comme un nom de méthode entraînera une erreur d'analyse: "erreur de syntaxe, inattendue T_NEW, attendez T_STRING". Les espaces de noms n'aideront pas, car le mot clé new s'applique à n'importe quel espace de noms. La seule façon de contourner cela serait au moyen d'une méthode virtuelle, par ex.

/** 
* @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 

Mais je déconseillerais cela. Toutes les méthodes magiques sont plus lentes que l'invocation directe des méthodes et si la règle simple est qu'il n'y a pas de nom de méthode new, alors soyez le. Utilisez un synonyme.

+0

Merci pour la recommandation. J'aime nouveau cependant. Ah. Peut-être que je vais utiliser créer à la place. – Emil

5

comme vous pouvez le voir here, « nouveau » est sur la liste des mots réservés, vous ne pouvez pas l'utiliser pour nommer une méthode.

You cannot use any of the following words as constants, class names, function or method names

3

Eh bien la réponse courte à cela semble être pas, car il est un reserved keyword.

Ce serait bien d'avoir des classes comme ça, mais les mots réservés sont importants pour une raison. Les gens ont tendance à utiliser d'autres synonymes à la place: create, new, getInstance() [usage généralement statique], etc.