Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: Laravel
Войти
Регистрация
Восстановить пароль
 
vitalii_g97
4 / 4 / 1
Регистрация: 22.09.2015
Сообщений: 22
1

Как получить нужную реализацию интерфейса

17.08.2018, 14:10. Просмотров 300. Ответов 4

У меня есть интерфейс, который реализован несколькими классами (драйверы для работы с разными api), я написал менеджер, который требует реализации интерфейса драйвера в constuctor и создал Service Provider с кодом ниже:

PHP
1
2
3
4
5
6
7
$this->app->bind('coin_name1_manager', function () {
    return new CoinsManager(new CoinName1Driver());
});
$this->app->bind('coin_name2_manager', function () {
    return new CoinsManager(new CoinName2Driver());
});
coin_name3...coin_name4...coin_name5 etc.
Но что делать если у меня к примеру есть пользователь, у него несколько валют и он хочет посмотреть баланс на всех кошельках.
Мне придется делать что то типа такого
PHP
1
2
3
4
app()->make('coin_name1_manager)->getBalance(array $data);
app()->make('coin_name2_manager)->getBalance(array $data);
app()->make('coin_name3_manager)->getBalance(array $data);
app()->make('coin_name4_manager)->getBalance(array $data);
$data это массив с нужными ключами для отправки запроса с методов драйвера.

Это работает но такой способ глаз режет как по мне, как подсунуть нужную реализацию в менеджер более динамично?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2018, 14:10
Ответы с готовыми решениями:

Generics and interfaces: Как правильно передать реализацию интерфейса с обобщением
Здравствуйте. Подскажите как реализовать следующую вещь? interface IAddControl<T> { T...

Записать реализацию интерфейса
interface Application{ void hello();}

Объясните реализацию интерфейсов на примере интерфейса IAny
На лекциях про IAny ничего не объясняли, но в билете есть такой вопрос. Поиск в интернет выдал...

Обеспечить инкапсуляцию, используя явную реализацию интерфейса
Я готовлюсь к экзамену на junior и там есть такой вопрос: обеспечить инкапсуляцию, используя явную...

Как с CSS получить нужную верстку дивами
Верстаю в быстром темпе сайт. Встал на одной загвоздке так, что не могу никуда съехать. Нужна...

4
tarasalk
1452 / 907 / 347
Регистрация: 13.06.2013
Сообщений: 3,140
17.08.2018, 15:15 2
PHP
1
app()->make('coun_all_manager')->getBalance(data);
А внутри уже дергаются все кошельки.
0
vitalii_g97
4 / 4 / 1
Регистрация: 22.09.2015
Сообщений: 22
17.08.2018, 15:47  [ТС] 3
Либо я не понял вашего ответа, либо вы не поняли моей проблемы.
Есть "драйверы" для каждой валюты, у каждой валюты разный API.
То есть кошельки на разных серверах.
Все драйверы реализуют один интерфейс.
Я хочу использовать один "интерфейс" доступа к этим методам, у меня он называется CoinsManager.
В менеджере используется конструктор в который передается драйвер.
0
tarasalk
1452 / 907 / 347
Регистрация: 13.06.2013
Сообщений: 3,140
17.08.2018, 17:25 4
Цитата Сообщение от vitalii_g97 Посмотреть сообщение
Я хочу использовать один "интерфейс" доступа к этим методам, у меня он называется CoinsManager.
Судя по тому, что вы создаете объект CoinsManager, интерфейсом он быть никак не может.

Не очень понятно чего вы хотите добиться. Если нужно перебрать все кошельки, то очевидно будет что-то похожее как у вас. Максимум можно все это в массив запихнуть и циклом пробегать.
0
vitalii_g97
4 / 4 / 1
Регистрация: 22.09.2015
Сообщений: 22
17.08.2018, 20:18  [ТС] 5
Ну я не просто так взял слово интерфейс в " ", оно выступает в роли интерфейса, я через этот класс общаюсь с драйверами
0
17.08.2018, 20:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2018, 20:18

Регулярные выражения (как получить нужную часть строки)
Всем привет! Ребята, очень прошу помочь. Задача состоит в следующем: есть ссылки и они могут...

Как найти нужную расшаренную папку и получить к ней полый доступ
Как найти нужную расшаренную папку и получить к ней полный доступ

Как получить экземпляр интерфейса RowSet?
Всем привет. Подскажите-ка плз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru