PHPStorm «Доступ к членам класса при создании экземпляра» PHPDoc

первое примечание: обратите внимание, что это прямо здесь не проблема кодирования, это проблема, которую я имею с IDE PhpStorm

У меня есть класс Model в моем проекте, который имеет метод load который в основном загружает что-то из базы данных. Затем у меня есть несколько классов (других моделей), которые расширяют модель, например,

User extends Model
Book extends Model

Теперь, в версии 5.4, добавленной для доступа к мембранам классов при создании экземпляра, у меня возникли некоторые проблемы с инспектором кода из phpstorm.

В пользовательском классе у меня есть метод «getUrl ()». Когда я это так называю

$user = new User();
$user->load(1);
$user->getUrl();

Я не получаю никаких предупреждений. Phpstorm знает, что $ user является объектом User и не выдает предупреждение.

Однако, когда я заявляю это так

$user = (new User())->load(1);
$user->getUrl();

Я получаю предупреждение Method 'getUrl()' not found in class Model, Я мог бы легко это исправить, добавив getUrl метод к модели, но есть только 3-4 класса (из 15), которые используют метод getUrl. Есть ли способ сказать ему, что $ user является объектом User, а не объектом Model?

Я знаю, что я мог бы просто добавить

/ ** @var Пользователь $ user * /

до кода, но я хочу, чтобы это было автоматически, а не то, что я должен регенерировать это все время.

Так что в основном проблема заключается в

В пользовательском классе есть метод getUrl
Вызов этого класса с доступом к члену класса в функции создания экземпляров выдает предупреждение, потому что PHPStorm считает, что это объект класса Model, а не пользователя

0

Решение

Это должно быть решено добавлением docblock к load() метод.

Проблема в том, что в вашем втором примере $user не является результатом new User(), но результат ->load() позвоните, и, похоже, PHPStorm не может сделать вывод, что load фактически возвращает объект правильного класса

Это должно выглядеть так:

<?php
class Model
{
/**
* @param int $id
* @return static
*/
public function load($id)
{
// …
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]