如何告诉PhpStorm实施细节? (魔术方法)

时间:2011-10-04 09:01:18

标签: phpstorm

我有一个对象“User”,其属性的可访问性被声明为protected,但可以通过magic __set-method直接设置。

enter image description here

现在,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中

看起来如何

enter image description here

我的目标:

要么让PhpStorm“理解”设计,要么只是摆脱那些恼人的红色标记,除了这个问题之外不会损害错误检测。

1 个答案:

答案 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";