PhpStorm 通过魔术方法访问的字段

2022-08-30 08:48:11

我已经在我的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

我试图用文档注释删除此错误,但无法弄清楚我该怎么做。任何帮助将不胜感激。


答案 1

编辑:只是因为我一直为此获得赞成票,我想在这个答案前面加上一个警告。我继承了一个旧项目,我不会长期工作,也不会得到报酬来正确输入所有内容。我认为以下一种核选择,只有在类似条件下才会这样做。如果这是一个你拥有的项目,或者至少会工作很长时间,特别是在现代PHP 7/8及以后的时代,请不要这样做,而是用实际类型或至少一个docblock:)原始答案如下。

如果要在没有文档注释的情况下删除它,则可以取消选中“通过魔术方法通知有关访问属性的信息”,该方法位于

PHP >未定义>未定义属性>检查的项目设置>

Notify about access to a field via magic method

PhpStorm 首选项屏幕截图


答案 2

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

您必须通过属于该类的 PHPDoc 注释来声明它们。@property

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

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

德米特里·杜列波夫(Dmitry Dulepov)的文章“快速提示:魔术方法和PhpStorm”中的片段。


推荐