私は CodeIgniter を使用しており、私がバウンスする独自のクラスを持っています。
特に 1 つは、モデルからインスタンス化されるクラスです。実際には、これを拡張するクラスです。以下のように始まります。
/**
* @var CI_Controller
*/
protected static $ci;
/**
* @var CI_DB_active_record
*/
protected static $db;
/**
* @var Module_Model
*/
protected static $model;
protected $dateModified = null;
protected $dateDeleted = null;
protected $dateCreated = null;
/**
* @param stdClass $data
*/
public function __construct(stdClass $data) {
self::$ci =& get_instance();
self::$db = self::$ci->db;
self::$model = self::$ci->{self::$model};
$this->{self::$model->primaryKey} = $data->{self::$model->primaryKey};
$this->dateModified = (self::$model->dateModified === false ? null : $data->{self::$model->dateModified});
$this->dateDeleted = (self::$model->softDelete === false ? null : $data->{self::$model->softDelete});
$this->dateCreated = (self::$model->dateCreated === false ? null : $data->{self::$model->dateCreated});
}
これを拡張するクラスでは、コンストラクターを次のように設定するだけです。
public function __construct(stdClass $data) {
parent::$model = 'properties';
parent::__construct($data);
}
そこに線self::$model = self::$ci->{self::$model};
が入ります。
モデルにアクセスできるように、どのモデルが作成されたかをクラスに伝えます。
これはすべてうまく機能しますが、私が抱えている問題はオートコンプリートにあります。
上記の行のオートコンプリートが機能するまで、この docblock により、クラス (すべてのモデルが拡張されたクラス) にself::$model->...
基づいて機能します。Module_Model
/**
* @var Module_Model
*/
明らかに、Code Igniter がどのように機能するかを理解できるほど賢い IDE はありません。そのため、指定したモデルに基づいてオートコンプリートできるとは考えていません。
Module_Model
しかし、クラスに基づいてオートコンプリートできるようにしたいと思います。
self::$model
への参照がまだ含まれているIDEを納得させる方法はありModule_Model
ますか?
問題があれば、PHPdoc を理解する IDE として PHPStorm を使用しています。