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

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
azz
Сообщения: 193
Зарегистрирован: 2016.07.06, 17:20

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

Сообщение 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. Что очевидно, т.к. в интерфейсе его нет.

Не соображу, как это можно решить?
Последний раз редактировалось azz 2020.01.31, 11:43, всего редактировалось 1 раз.

Аватара пользователя
yiijeka
Сообщения: 3085
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka »

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

Аватара пользователя
ElisDN
Сообщения: 5536
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

Либо не использовать, либо добавить в интерфейс.

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

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

Сообщение yiiliveext »

Хм, вызов protected метода - это само по себе сильно.

azz
Сообщения: 193
Зарегистрирован: 2016.07.06, 17:20

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

Сообщение azz »

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

Ответить