phpstrom 怎么设置代码提示?

作者站长头像
站长
· 阅读数 6

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

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个回答
avatar
test
2024-07-02

添加注释:

/**
 * @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,
    ]));
}

或者使用插件:

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容