mannaro
@mannaro
Умею профессионально гуглить

Как определить экземпляр класса в PHPDoc?

Здравствуйте! Я пользую PHPStorm и пишу комментарии в стиле PHPDoc:

class User {
  static function getWolF() {
    $class = 'WolF';
    $class = new $class();
    return $class;
  }
}

class WolF {
  public function test($a, $b) {
    return $a + $b;
  }
}

class Hope {
  /**
   * @var WolF
   */
  protected $j;

  public function jaz() {
    $this->j = new User();
    $this->j = $this->j->getWolF();

    $this->j->test();
  }
}


Так вот, в PHPStorm $this->j->test(); выделяется красным (пишет, что нет метода test).
Я могу изменить все, кроме класса User.
  • Вопрос задан
  • 2860 просмотров
Решения вопроса 1
@Confl1kt
Я могу изменить все, кроме класса User.
А, точнее, там каждый раз разный тип возвращается.


ну тогда для возвращаемых классов нужен интерфейс или абстрактный класс

и магия - это плохо
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Confl1kt
/**
* @return Wolf
*/
static function getWolF() {
    $class = 'WolF';
    $class = new $class();
    return $class;
  }
Ответ написан
@Cage
Если к свойству обращаться не из метода объекта и соответственно свойство было бы объявлено как public тогда можно было бы написать в доке для класса
/**
* @property WolF $j
*/
class Hope {

  public $j;

...
}

Но ни для защищенных свойств ни при обращении к магическому свойству внутри методов класса так не сработает.
Попробуйте сделать описание для полученных данных, примерно так:
public function jaz() {
    $user = new User();
    $j = $user->getWolF();
/**
* @var $j WolF
*/
    $this->j = $j;
    $this->j->test();
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы