我正在使用 CodeIgniter 并且有我自己的类,我可以四处走动。
特别是一个从我的模型中实例化的类,实际上是一个扩展它的类。它开始如下,
/**
* @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};
进来的地方。
它告诉类创建的模型是什么,以便它可以访问该模型。
这一切都很好,但我遇到的问题是自动完成。
直到上面列出的行自动完成工作时调用self::$model->...
它基于Module_Model
类(这是我的所有模型都扩展的类)由于这个docblock:
/**
* @var Module_Model
*/
现在显然没有 IDE 会足够聪明地理解 Code Igniter 的工作原理,所以我不希望它能够根据我指定的模型自动完成。
但是,我希望它仍然能够根据Module_Model
课程自动完成。
无论如何(最好通过 docblocks)来说服self::$model
仍然包含对Module_Model
.
如果重要的话,我将使用 PHPStorm 作为我的 IDE,它理解 PHPdoc。