PHPStorm を使用して、PHP でいくつかの抽象 MVC クラスを作成しようとしています。私がジェネリック クラス ラッパーに使用しているオーバーライド クラス プロパティのいくつかは、静的メソッドとプロパティを使用する方が適している傾向があります。コードは正常に動作しますが、静的変数 (継承されたメソッドに存在する変数) を指すときに変数を使用してクラス名を表すと、PHPStorm はそれを処理する方法を認識せず、IDE でエラーとして表示します。この種のことを行うためのより良い方法があるかどうか、または単に IDE で無視することを学ばなければならないものになるかどうか疑問に思っています。
例:
class AbstractModel {
protected static $_dataMapper = null;
protected static $_subs = null;
public function __construct($data=null) {
// constructor omitted with things like a generic class init, etc.
}
// $_subs is a static array who's value is a class name use for
// populating sub-objects as part of a class instance
public function setSubProperty($subKeyName,$value) {
$dataType = get_called_class();
/*************************************
* PHPStorm complains here on $_subs *
*************************************/
if(is_array($dataType::$_subs)
&& array_key_exists($subKeyName,$dataType::$_subs)) {
$setMethod = 'set' . ucfirst($subKeyName);
return $dataType->$setMethod($value);
} else {
return false; // or throw an exception
}
}
}
class SomedataModel extends AbstractModel {
public $other = null;
protected static $_subs = array(
'other' => "OtherModel"
);
public function __construct($data=null) {
parent::__construct($data=null);
foreach(array_keys(self::$_subs) as $_k) {
$setMethod = 'set'.ucfirst($_k);
$this->$setMethod();
}
}
public function setOther($data=null) {
// sanitize and set instance of 'other' as $this->other
}
}