PHPStorm 解决单例模式下无法进行代码提示问题

mervyn 2018年6月15日22:44:46Tools评论25

在我们写代码时,为了防止一个类被重复实例化,往往采用 单例模式 实例化类。
通常的做法是先写好一个基类 BaseLogic.class.php,内容如下:文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

<?php
namespace Logic;

class BaseLogic {
    private static $instance = [];

    public static function getInstance() {
        $class_name = get_called_class();

        if (isset(self::$instance[$class_name])) {
            return self::$instance[$class_name];
        }
        self::$instance[$class_name] = new static();
        return self::$instance[$class_name];
    }
}

实际写业务逻辑时需要继承上边的 BaseLogic , 代码如下:文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

<?php
namespace Logic;

class OrderLogic extends BaseLogic {

    public function getOrderInfo() {
        echo "order info";
    }
}

实际使用该 OrderLogic 时,使用以下方法即可:文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

OrderLogic::getInstance()->getOrderInfo();

当用这种方式写代码时, PHPStorm 无法识别 getOrderInfo 方法, 针对这种情况只需要在函数上方加入注释 @return static 即可, 修改后的代码如下:文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

<?php
namespace Logic;

class BaseLogic {
    private static $instance = [];

    /**
     * @return static
     */
    public static function getInstance() {
        $class_name = get_called_class();

        if (isset(self::$instance[$class_name])) {
            return self::$instance[$class_name];
        }
        self::$instance[$class_name] = new static();
        return self::$instance[$class_name];
    }

    public function getOrderInfo() {
        echo "get Order Info";
    }
}

class OrderLogic extends BaseLogic {

    public function getOrderInfo() {
        echo "order info";
    }
}

OrderLogic::getInstance()->getOrderInfo();

这时如果 BaseLogicgetInstance 方法的注释是 @return self 则跳转时只能跳到 BaseLogic 类对应的方法而无法跳到子类中。文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

这里主要跟 PHP 的后期延伸绑定有关。文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

参考链接:文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

后期静态绑定文章源自Mervyn's Blog-https://mervyn.life/336543fc.html

weinxin
我的微信公众号
微信扫一扫
mervyn
PHPStorm 更改 PHP 版本号 Tools

PHPStorm 更改 PHP 版本号

PHPStorm 默认的 PHP 版本是 5.4, 当我们用服务器使用的是 PHP7 时,经常会出现语法错误的提示,这个时候需要将 PHPStorm 中的 PHP 版本进行修改才行。操作步骤如下: P...
新入手的Mac需要做的事 Tools

新入手的Mac需要做的事

最近换了一个mac设备,又折腾了一遍各种环境,顺便记录下mac设置需要修改的配置和必要的软件。系统设置系统偏好设置-> 通用 -> 显示滚动条 -> 始终系统偏好设置-> 通用...
使用 markdown 画流程图、时序图 Tools

使用 markdown 画流程图、时序图

在日常工作中,难免会画一些流程图、时序图。之前都是选择使用在线的画图网站,画完然后截图插入到文档。我个人用的比较多的主要是 腾讯文档 。 相较于截图的方式,代码画图都有哪些好处呢? 使用比较轻便。 不...
Git 常用命令速查表 Tools

Git 常用命令速查表

由于之前一直用sourceTree 对Git的项目进行操作,对 Git 的命令行操作不是很熟。最近切换到了 vsocde 结合remote ssh 插件来开发项目(强烈推荐),个人觉得 vscode ...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: