Php 使用singleton而不是new运算符检索对象时netbeans自动完成?

Php 使用singleton而不是new运算符检索对象时netbeans自动完成?,php,netbeans,Php,Netbeans,当我使用“new”操作符实例化一个类时,netbeans自动完成对象的成员没有问题 $instance = new Singleton(); $instance-> // shows test() method 但是,当我使用单例检索对象时,它无法自动完成检索到的对象中的成员 getInstance代码如下所示: public function test() { echo "hello"; } public static function getInstance() { if

当我使用“new”操作符实例化一个类时,netbeans自动完成对象的成员没有问题

$instance = new Singleton();
$instance-> // shows test() method
但是,当我使用单例检索对象时,它无法自动完成检索到的对象中的成员

getInstance代码如下所示:

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

public static function getInstance() {
if ( ! is_object(self::$_instance)) {
    self::$_instance = new self();
    self::$_instance->initialize();
}
return self::$_instance;
}
因此,我使用:

$instance = Singleton::getInstance();
$instance-> // no autocompletion!
有人有同样的问题吗

我如何解决这个问题


谢谢

在分配之前,您可以添加注释以指示
$instance
是哪种类型:

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

您将获得自动完成功能:


(来源:)

(通过最近的netbeans夜间构建进行测试)



另一种解决方案是在
getInstance()
方法的声明中添加docblock,以指示它返回
Singleton
类的实例:

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

}

然后,您还将获得自动完成:



(来源:)

我认为第二种方法更好,因为我不必每次调用前都添加注释。谢谢!!你救了我一年+2(1)看不见的点:)不客气:-);;是的,第二种解决方案,如果通常更好,一般来说;;但第一种方法在两种情况下很有用:当您无法修改类(例如,库)时,以及当您调用的方法可以根据参数返回不同类的实例时(例如,factory方法)