通过魔法方法访问 PhpStorm 场

我已经在 CodeIgniter 库文件夹中点燃了数据库。

图书馆的一些代码

class Datatables
{
/**
* Global container variables for chained argument results
*
*/
protected $ci;
protected $table;
protected $distinct;
protected $group_by;
protected $select         = array();
protected $joins          = array();
protected $columns        = array();
protected $where          = array();
protected $filter         = array();
protected $add_columns    = array();
protected $edit_columns   = array();
protected $unset_columns  = array();


/**
* Copies an instance of CI
*/
public function __construct()
{
$this->ci =& get_instance();
}

然后我打电话给模型库

class Common_Model extends MY_Model{


function __construct(){
parent::__construct();
$this->load->library('Datatables.php');
}

然后我尝试调用库函数

function select_fields_joined_DT($data, $PTable, $joins = '', $where = '', $addColumn = '',$unsetColumn='')
{
/**
*
*/
$this->datatables->select($data);
if ($unsetColumn != '') {
unset_column($unsetColumn);
}
$this->datatables->from($PTable);
if ($joins != '') {
foreach ($joins as $k => $v) {
//$this->datatables->join($v['table'], $v['condition'], $v['type']);
}
}


if ($addColumn != '') {
$this->datatables->add_column("Actions", $addColumn);
}


$result = $this->datatables->generate();
return $result;
}

一切正常,除了 phpstorm 给我显示了这个错误:

Field Accessed via magic method

enter image description here

我试图通过文档注释来消除这个错误,但是不知道如何才能做到这一点。 如有任何帮助,我们将不胜感激。

43930 次浏览

编辑: 正因为我不断得到这方面的支持,我想在这个答案的前面加上一个警告。我继承了一个老项目,我不会长期工作,也不会收到适当的类型的一切。我认为以下是一个核选择,只有在类似的条件下才会这样做。如果这是一个你自己的项目,或者至少要花很长时间,特别是在现在的 PHP 7/8和更早的时代,请不要这样做,而是用实际的类型或至少一个 docblock 来整理你的代码:)原始答案如下。

如果您想删除这个没有文档注释,您可以取消选中 有关通过魔法方法访问属性的通知,它可以在

项目设置 > 检查 > PHP > 不确定 > < strong > 未定义属性

Notify about access to a field via magic method

PhpStorm 首选项截图

正如 懒虫 在问题评论中提到的:

您必须通过 PHPDoc 注释中的 @property声明它们 属于那个阶层。

/**
* @property string $bar
*/
class Foo {


public function __get($name) {
if ($name == 'bar') {
return 'bar';
}
return NULL;
}
}

摘自 Dmitry Dulepov 的文章 “快速提示: 魔法方法和 PhpStorm”

如果您不想禁用整个项目的检查,并且不能修改类文件以添加 @property标记,下面是如何在使用该警告的位置禁用该警告的方法:

/** @noinspection PhpUndefinedFieldInspection */

只需将它添加到一个新的行中,就在使用魔术字段的行之前。

@ christian answer 仍然有效,但是禁用检查的路径最近改变了。

下面是一个新的例子:

参数 > 编辑器 > 检查 > PHP > 未定义符号 > 未定义属性

然后禁用“通过魔法方法访问属性的通知”。