我有一个对象“User”,其属性的可访问性被声明为protected,但可以通过magic __set-method直接设置。
现在,PhpStorm发出了与右侧红色大柱明显不一致的信号。
是否有可能向PhpStorm解释发生了什么,所以这不再显示为错误?
编辑:
我使用PhpStorm 2.1.4
好的,这里有一些代码可以解释这个问题(连同到目前为止Alexey的建议解决方法,遗憾的是我没有这样做):
c.php:
<?php
/**
* @property mixed $a
*/
class c1
{
protected $a;
public function __construct() { $this->a = __CLASS__; }
public function __get($n) { return $this->{$n}; }
}
/**
* @property $a mixed
*/
class c2
{
protected $a;
public function __construct() { $this->a = __CLASS__; }
public function __get($n) { return $this->{$n}; }
}
test.php的
<?php
require "c.php";
$c1 = new c1();
var_dump($c1->a);
$c2 = new c2();
var_dump($c2->a);
和输出:
string 'c1' (length=2)
string 'c2' (length=2)
在PhpStorm中和看起来如何:
我的目标:
要么让PhpStorm“理解”设计,要么只是摆脱那些恼人的红色标记,除了这个问题之外不会损害错误检测。
答案 0 :(得分:8)
现在正在PHPStorm 3中工作:)
不幸的是,这是我们跟踪器中的一个开放请求,请参阅 http://youtrack.jetbrains.net/issue/WI-4468
现在避免此警告的唯一方法是将@property
添加到$ user的类声明中。即。
/**
* @property $name string
*/
class User {
protected $name;
}
$user = new User();
$user->name = "me";