我试图让PhpStorm停止警告我有关动态初始化类的方法。
以下是我方法的代码:
function create_or_update_objects ($object_name, $method_callbacks = []) {
// grab duplicate field names used to check for existing objects
$field = new Field();
$duplicate_field_names = $field->fetch_duplicate_names();
foreach ($_SESSION['objects'] as $session_object) {
$object = new $object_name();
// set object properties
foreach ($session_object as $key => $value) {
if (property_exists($object, $this->data[$key]['name'])) {
$object->{$this->data[$key]['name']} = $value;
}
else {
$object->fields[$this->data[$key]['name']] = $value;
}
}
// perform object method callbacks
foreach ($method_callbacks as $method_callback) {
$object->$method_callback();
}
if ($object->exists_by_duplicate_fields($duplicate_field_names)) {
// object already exists, update by data field names
$object->set_id_by_duplicate_fields($duplicate_field_names);
$object->update_by_data_names($this->data);
}
else {
// object does not exist, create it
$object->create();
}
}
}
PhpStorm正在警告我找不到以下方法:
我知道我可以在每一行上方使用/** @noinspection PhpUndefinedMethodInspection */
- 但我想知道是否有更好的方法可以做到这一点?
答案 0 :(得分:6)
我会做什么:
创建一个抽象类。
在抽象类中添加缺少的方法。它们应该是抽象的,或者以正确的回报进行实际实施。
在$object = new $object_name();
行上方添加此PHPDoc指令:
/** @var PARENT_CLASS $object */
- 只需将PARENT_CLASS
替换为真实的
示例:的
abstract class MyParent {
public $fields;
abstract public function exists_by_duplicate_fields($duplicate_field_names);
abstract public function set_id_by_duplicate_fields($duplicate_field_names);
abstract public function update_by_data_names($data);
abstract public function create();
}
然后在代码的某处:
/** @var MyParent $object */
$object = new $object_name();
注意:
您还可以在/** @var Field[] */
之上添加public $fields;
它应该有助于PhpStorm了解每次使用时如何对待$fields
成员。
如果所有名称为$object_name
的类实际上都可以从PARENT_CLASS
继承,那就太好了。
如果需要,您可以使用实现替换抽象方法。