/ phpstorm

phpstorm后期静态绑定代码提示

先上代码

class Ext_Data { protected static $_instance = array(); public static function getInstance() { $className = get_called_class(); if (!isset(self::$_instance[$className])) { self::$_instance[$className] = new $className(); } return self::$_instance[$className]; } public static function retErr($msg) { return array('result' => false, 'msg' => $msg); } public static function retOK($data = array(), $msg = '') { return array('result' => true, 'data' => $data, 'msg' => $msg); } }

Ext_Data类是父类,子类需要用到该类的一些静态方法(retOk、retErr),并且要求子类是单例,例如:

class Data_KV extends Ext_Data { protected function __construct() { //构造函数 } public function get($key) { //一些操作 return self::retOK($ret); } public function set($key, $value) { //一些操作 if ($ret === false) { return self::retErr('操作失败'); } return self::retOK($ret); } }

因为子类的类名是动态的,所以我们没有办法在父类的getInstance方法上写注解来指明返回类型,这就导致使用Data_KV的时候没有代码提示,而且还会报方法未定义:

这个问题困扰了很久,今晚和室友吐槽的时候也提到这个问题,于是一拍脑袋想到别人应该也遇到过,于是在jetbrain官网搜索了一下,发现果真有解决方案

直接添加一个@return static的注解即可

/** * @return static */ public static function getInstance() { $className = get_called_class(); if (!isset(self::$_instance[$className])) { self::$_instance[$className] = new $className(); } return self::$_instance[$className]; }

phpstorm还支持@return $this   @return self这两种注解

phpstorm后期静态绑定代码提示
Share this