使用类的getInstance方法时,PhpStorm没有自动完成

时间:2018-03-06 12:09:22

标签: phpstorm

PhpStorm autocompletion

有人可以告诉我为什么当我使用getInstance()方法而不是新的ClassName时,自动完成功能不起作用吗?

以下是该类的getInstance()方法:

// Define The Namespace For Our Library
namespace JUnstoppable;

class JUnstoppable 
{
    // Instance Of The Class
    protected static $instance = array ();

    public static function getInstance ($forPlatformName = 'joomla')
    {
        $forPlatformName = strtolower($forPlatformName);

        if (!isset(static::$instance[$forPlatformName]))
        {
            static::$instance[$forPlatformName] = new \JUnstoppable\JUnstoppable($forPlatformName);
        }

        return static::$instance[$forPlatformName];
    }

    public function __construct ($platformName = 'joomla')
    {
    }

    public function doExecute ($test = 'lalala')
    {
        return $test;
    }
}

1 个答案:

答案 0 :(得分:1)

  

当我使用getInstance()方法而不是新的ClassName时,有人可以告诉我为什么自动完成不起作用吗?

那是因为IDE不知道你的$instance静态属性中有什么内容,因此无法弄清getInstance()返回的内容。从IDE的角度来看,它只是普通数组(任何类型的元素)而不是JUnstoppable个实例的数组。

您可以在$test上放置插入符号并调用View | Quick Documentation以查看IDE对该变量的了解。如果它没有说JUnstoppable那么就没有奇迹。

只需通过 PHPDoc的 getInstance()标记为@return方法的返回值添加正确的类型提示:

/**
 * My super method.
 *
 * @param string $forPlatformName Optional parameter description
 * @return JUnstoppable
 */
public static function getInstance ($forPlatformName = 'joomla')

您可以指定具体类(在这种情况下为JUnstoppable)..或static如果子类也将使用此方法,它们将返回不同的实例。

或者(或更好地说:另外)你可以输入提示$instance属性,IDE将用它来确定getInstance()方法返回的内容:

/** @var JUnstoppable[] Instance Of The Class */
protected static $instance = array ();