Страница 1 из 1

Корректная подсветка методов базового класса при автовайринге

Добавлено: 2020.01.30, 18:44
azz
Приветствую. Есть такая структура

Код: Выделить всё

interface User {
	public function findByPk($pk);
}

abstract class AbstractBaseRepository {
	public function abstractClassMethod(): int {
		// some code
	}
}

class UserRepository extends AbstractBaseRepository implements User {
	public function findByPk($pk) {
		// some code
	}
}

class UserController {
	public function __construct(User $user) {
		// тут у нас экземпляр UserRepository, полученный через DI и autowire
		$user->findByPk(123);
		$user->abstractClassMethod();
	}
}
В конструкторе UserController у нас в $user экземпляр UserRepository и вызов $user->findByPk(123) phpstorm воспринимает нормально. Но вот $user->abstractClassMethod() уже подсвечивает, ругаясь на отсутствующий метод abstractClassMethod. Что очевидно, т.к. в интерфейсе его нет.

Не соображу, как это можно решить?

Re: Корректная подсветка методов базового класса при автовайринге

Добавлено: 2020.01.31, 08:33
yiijeka
Решить что? Вам же вроде очевидно, почему так происходит. Но мне не очевидно, почему вы ожидаете User, а используете методы AbstractBaseRepository ...

Re: Корректная подсветка методов базового класса при автовайринге

Добавлено: 2020.01.31, 09:06
ElisDN
Либо не использовать, либо добавить в интерфейс.

Re: Корректная подсветка методов базового класса при автовайринге

Добавлено: 2020.01.31, 11:39
yiiliveext
Хм, вызов protected метода - это само по себе сильно.

Re: Корректная подсветка методов базового класса при автовайринге

Добавлено: 2020.01.31, 11:44
azz
Хм, вызов protected метода - это само по себе сильно.
Сорри, там конечно же public :D
Но мне не очевидно, почему вы ожидаете User, а используете методы AbstractBaseRepository ...
Есть несколько репозиториев, и для них можно написать несколько общих методов, дабы не заниматься копипастой. В общем сегодня на свежую голову решил написать базовый интерфейс и наследовать от него все остальные.