lamo4ok
@lamo4ok
Программист

Как при помощи phpDoc описать сразу два варианта метода, перегруженных через __call и __callStatic?

В классе есть два магических метода __call и callStatic, с помощью которых перегружается условный метод read(). В случае обращения к данному методу как к статическому, ему передается id сущности для чтения. В случае обращения к нему, как к методу экземпляра класса, ему ничего не передается, id берется из свойства экземпляра.

В обоих случаях возвращается один и тот же либо вновь созданный, либо уже существующий экземпляр класса. Перед классом я пробую записать вот так вот оба варианта метода, статический и нет:

/**
 * Class Entity
 *
 * @package MyCompany\Contracts
 *
 * @property array  $data
 * @property int    $id
 * @property string $name
 *
 * @method Entity read()
 * @method static Entity read( $id )
 */


Но PhpStorm 2019.1 ругается на такую запись вот так:

Method with same name already defined in this class
Another definition with same name exists in this file


Кто прав, я или PhpStorm? Если я неправ, то как мне ублажить последнего?
  • Вопрос задан
  • 463 просмотра
Решения вопроса 1
Minifets
@Minifets
Hello world!!!
Нет, такое поведение в IDE не заложенно, и подсказать ей никак нельзя.

Если вы попытаетесь внутри класса объявить 2 метода - с одинковым именем, то получите точно такую же ошибку. Method with same name already defined in this class. Собственно это и есть ожидаемое поведение, когда вы описываете методы в phpDoc.

class Test {

    public function test() {
    }

    public static function test() {
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
ide не рассчитана на подобный говнокод
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Spice IT Recruitment Москва
До 230 000 ₽
Smart Медицина Москва
от 150 000 ₽
Playkot Санкт-Петербург
от 150 000 до 200 000 ₽
06 июл. 2020, в 23:49
10000 руб./за проект
06 июл. 2020, в 23:32
35000 руб./за проект