代码之家  ›  专栏  ›  技术社区  ›  JUnstoppable

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

  •  0
  • JUnstoppable  · 技术社区  · 6 年前

    PhpStorm autocompletion

    有人能告诉我为什么当我使用 getInstance() 方法而不是新的类名?

    以下是 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 回复  |  直到 6 年前
        1
  •  1
  •   LazyOne    6 年前

    有人能告诉我为什么当我使用 getInstance() 方法而不是新的类名?

    这是因为IDE不知道 $instance 静态属性,因此无法确定 getInstance() 返回。从IDE的角度来看,它只是普通数组(任何类型的元素),而不是 JUnstoppable 实例。

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


    只需为的返回值添加适当的类型提示 getInstance() 方法via PHPDoc的 @return 标签:

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

    可以指定混凝土类( 6可停止 在这种情况下)。。或 static 如果子类也将使用此方法,则它们将返回不同的实例。


    或者(或者最好说:另外)您可以键入提示 $实例 属性,IDE将使用该属性来确定 getInstance() 方法返回:

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