11

アクセス可能性が保護されていると宣言されているが、魔法の__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 に設計を「理解」させるか、この問題以外のエラー検出を損なうことなく、どこにでもある迷惑な赤いマークを取り除くだけです。

4

1 に答える 1

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";
于 2011-10-05T13:31:46.470 に答える