Подтвердить что ты не робот

Как сообщить PhpStorm о деталях реализации? (магические методы)

У меня есть объект "Пользователь", который имеет атрибуты, доступность которых объявляется защищенными, но которые могут быть установлены непосредственно с помощью магического метода __set.

enter image description here

Теперь PhpStorm сигнализирует об этой кажущейся несогласованности с большим красным столбцом с правой стороны.

Можно ли объяснить PhpStorm, что происходит, поэтому это больше не отображается как ошибка?


EDIT:

Я использую PhpStorm 2.1.4

В порядке, вот какой-то код, который иллюстрирует проблему (вместе с предлагаемым обходным путем от Алексея, который, к сожалению, не делает этого для меня):

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 "понимают" дизайн, либо просто избавляются от этих раздражающих красных знаков повсюду, не ухудшая при этом обнаружение ошибок, кроме этой проблемы.

4b9b3361

Ответ 1

Теперь это работает в PHPStorm 3:)

К сожалению, это открытый запрос в нашем трекере, см. http://youtrack.jetbrains.net/issue/WI-4468

Единственный способ избежать этих предупреждений теперь - добавить объявление @property в $user class. то есть.

/**
 * @property $name string
 */
class User {
    protected $name; 
}
$user = new User();
$user->name = "me";