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