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

0

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

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

User extends Model
Book extends Model

Теперь, с добавленной функцией 5.4 для доступа к классам membes при создании, у меня есть некоторые проблемы с Code Inspector от 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, а не пользователем

Теги:
phpstorm
phpdoc

1 ответ

0

Это необходимо решить, добавив док-блок в метод load().

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

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

<?php
class Model
{
    /**
     * @param int $id
     * @return static
     */
    public function load($id)
    {
        // …
    }
}
  • 0
    Привет, да, я знаю это, но проблема в том, что Метод загрузки находится в модели. Это значит, что я не могу добавить туда все классы, иначе у меня будет 15 объявлений при возврате. @return Пользователь | Книга | Галерея и т. Д. Если бы метод находился в классе User, он решил бы эту проблему, однако он находится в классе Model.
  • 0
    @return static должно сделать свое дело
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню