作者:阳光美女新干线- | 来源:互联网 | 2023-02-13 15:59
我试图让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正在向我发出有关未找到的以下方法的警告:
exists_by_duplicate_fields
set_id_by_duplicate_fields
update_by_data_names
创建
我知道我可以使用/** @noinspection PhpUndefinedMethodInspection */
上面的每一行 - 但我想知道是否有更好的方法来做到这一点?
1> Axalix..:
我会怎么做:
创建一个抽象类.
在抽象类中添加缺少的方法.它们应该是抽象的,或者以正确的回报进行实际实施.
上面的行$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
实际上都可以从a继承,那将是很好的PARENT_CLASS
.
如果需要,您可以使用实现替换抽象方法.