2010-05-09 18 views
6

cuando utilizo el operador 'nuevo' para instanciar una clase, netbeans no tiene problema para autocompletar los miembros del objeto.netbeans autocompletion cuando se usa singleton para recuperar objetos en lugar de un nuevo operador?

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

pero cuando se utiliza un producto único para recuperar un objeto que no puede autocompletar los miembros en el objeto recuperado.

el código getInstance es así:

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

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

así que uso:

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

¿alguien tiene el mismo problema?

¿cómo puedo solucionarlo?

gracias!

Respuesta

12

Se podría añadir un comentario para indicar de qué tipo es $instance, antes de asignarlo:

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


Y será conseguir la terminación automática:

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

(probado con una construcción nocturna reciente de netbeans)



Otra solución sería añadir un bloque de documentación para la declaración de su método de getInstance(), para indicar que se devuelve una instancia de la clase Singleton:

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

} 


Y, a continuación, , también obtendrá autocompletado:

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

+1

Creo que el segundo método es mejor porque no tengo que agregar comentarios cada vez antes de llamarlo. ¡¡muchas gracias!! ¡¡¡salvaste mi año !! +2 (1 punto invisible) :) –

+0

De nada :-) ;; Sí, la segunda solución si a menudo es mejor, en términos generales ;; pero el primero puede ser útil en dos casos: cuando no se puede modificar la clase * (una biblioteca, por ejemplo) *, y cuando el método que se llama puede devolver instancias de diferentes clases, dependiendo del parámetro * (es decir, un método de fábrica) , por ejemplo)* –

Cuestiones relacionadas