2010-05-09 3 views
6

Lorsque j'utilise l'opérateur 'new' pour instancier une classe, netbeans n'a aucun problème à compléter automatiquement les membres de l'objet.autocomplétion netbeans lors de l'utilisation de singleton pour récupérer l'objet au lieu d'un nouvel opérateur?

$instance = new Singleton(); 
$instance-> // shows test() method 

mais quand j'utilise un singleton pour récupérer un objet, il ne peut pas les membres de saisie semi-automatique de l'objet récupéré.

le code getInstance ressemble à ceci:

public function test() { 
    echo "hello"; 
} 

public static function getInstance() { 
if (! is_object(self::$_instance)) { 
    self::$_instance = new self(); 
    self::$_instance->initialize(); 
} 
return self::$_instance; 
} 

donc j'utiliser:

$instance = Singleton::getInstance(); 
$instance-> // no autocompletion! 

ce que quelqu'un a le même problème?

Comment puis-je contourner ce problème?

merci!

Répondre

12

Vous pouvez ajouter un commentaire à indiquer quel type de $instance est, avant de l'assigner:

/* @var $instance Singleton */ 
$instance = Singleton::getInstance(); 


Et vous obtiendrez autocomplétion:

http://extern.pascal-martin.fr/so/question-2796730-netbeans.png

(testé avec une compilation nocturne de netbeans)



Une autre solution serait d'ajouter un docblock à la déclaration de votre méthode getInstance(), pour indiquer qu'il renvoie une instance de la classe Singleton:

/** 
* @return Singleton 
*/ 
public static function getInstance() { 

} 


Et puis , vous obtiendrez également l'auto-complétion:

http://extern.pascal-martin.fr/so/question-2796730-netbeans-2.png

+1

Je pense que la deuxième méthode est meilleure parce que je ne dois pas ajouter de commentaire à chaque fois avant de l'appeler. Merci beaucoup!! tu as sauvé mon année !! +2 (1 point invisible) :) –

+0

De rien :-) ;; Oui, la deuxième solution est souvent meilleure, d'une manière générale; mais la première peut être utile dans deux cas: lorsque vous ne pouvez pas modifier la classe * (une bibliothèque, par exemple) *, et quand la méthode que vous appelez peut revenir instances de classes différentes, en fonction du paramètre * (ie une méthode de fabrication , par exemple)* –

Questions connexes