phpstrom 怎么设置代码提示?

古老的框架有些代码不能提示

class kernel{
 static function single($class_name,$arg=null){
        if($arg===null){
            $p = strpos($class_name,'_');
            if($p){
                $app_id = substr($class_name,0,$p);
                if(!isset(self::$__single_apps[$app_id])){
                    self::$__single_apps[$app_id] = app::get($app_id);
                }
                $arg = self::$__single_apps[$app_id];
            }
        }
        if(is_object($arg)){
            $key = get_class($arg);
            if($key==='app'){
                $key .= '.' . $arg->app_id;
            }
            $key = '__class__' . $key;
        }else{
            $key = md5('__key__'.serialize($arg));
        }
        if(!isset(self::$__singleton_instance[$class_name][$key])){
            self::$__singleton_instance[$class_name][$key] = new $class_name($arg);
        }
        return self::$__singleton_instance[$class_name][$key];
    }
}

都是 $messageModule = kernel::single('class_name');这样调用的
怎么让$messageModule写代码时有提示哪些方法呢

阅读 1.8k
1 个回答

添加注释:

/**
 * @template T
 * @param class-string<T> $class_name
 * @param $arg
 * @return T
 */
function single($class_name, $arg = null)
{
}

或者使用 meta 文件,在项目根目录下创建 .phpstorm.meta.php 文件

namespace PHPSTORM_META {
    // 这里的 kernel::single 如果有完整的命名空间就需要写完整,这里的 0 表示第 0 个参数
    override(kernel::single(0), map([
        // 第一个 这里表示第 0 个参数传入任意字符串,都将尝试解释为返回这个以这个字符串为类名的实例
        '' => '@',
        // 下面就可以自定义,比如你传入了一个 abc 将会返回一个 ClassAbc 类的实例
        'abc' => ClassAbc::class,
    ]));
}

或者使用插件:

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题