1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/JesusSlim-pinject

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Pinject: внедрение в PHP

Использование

[Английский] Китайский

Установка

Установите Pinject через Packagist:

https://packagist.org/packages/jesusslim/pinject

Установка:

composer require jesusslim/pinject

Если ваш Composer не позволяет использовать dev-master, добавьте эту конфигурацию в composer.json:

"minimum-stability": "dev"

Инжектор

Интерфейс Injector определяет некоторые функции для внедрения, такие как:

  • map — сопоставляет конкретный объект или класс с контейнером внедрения;
  • get — получает объекты, которые вы сопоставили;
  • produce — создаёт конкретный объект.

Класс Injector реализует интерфейс InjectorInterface. Создайте свой собственный класс, который должен использовать внедрение и расширяет класс Injector. Затем используйте следующие функции:

  • //сопоставление данных или объекта $injector->mapData('test',12345); $injector->mapData(Student::class,new Student('Slim'));

  • //отображение класса $injector->mapSingleton(StudentInterface::class,GoodStudent::class);

  • //создание //если ключ найден в сопоставленных данных, объектах, он вернёт то, что мы сопоставили. //Если ключ найден в отображённых классах, он проверит, был ли этот класс создан, если он был создан, он возвращает конкретный объект, созданный ранее, иначе возвращает новый конкретный объект этого класса. //Если этот ключ не найден ни в одном из сопоставлений, он попытается отразить этот класс, если только мы не используем функцию mustReg(), чтобы убедиться, что всё, что может быть создано, должно быть сначала сопоставлено. $injector->produce(StudentInterface::class);

  • //вызов функции //он заполнит параметры этой функции конкретным объектом, созданным с помощью pinject. $injector->call(function(Student $std){ ... });

  • //вызов функции в классе //он вызовет функцию в классе. Он попытается найти класс из pinject, если он уже создан или отражён. И заполняет параметры конкретным объектом, созданным pinject. $injector->callInClass($class_name,$action,$out_params);

Цепочки

Мы можем использовать цепочки для выполнения некоторых операций связывания.

Пример:

$chains = new Chains($app); //здесь $app — это инжектор $chains->chain(RequestHandler::class) ->chain(function($data,$next){ $r = Auth::checkToken($data['token']); if($r !== true){ dump("Token wrong"); }else{ $next($data); } }) ->chain(Student::class) ->chain(function($data){ dump($data); }) ->action('handle') ->run(); //или используйте runWith($your_last_chain_func);

Мы можем связать замыкание или класс в цепочки. Если это класс, он вызовет метод с именем «handle». Каждое замыкание или метод для обработки должны иметь два параметра: данные, передаваемые в цепочке, и следующий обработчик. И, наконец, в каждой цепочке мы должны вызвать следующий обработчик, если это успешно.

Другой способ использования цепочек:

Ещё один способ использования цепочек — использовать runWild вместо run/runWith, и это больше похоже на использование Martini/Injector в golang.

Пример:

$chains = new \Inject\Chains($app); $app->mapData('any_param_here','Example'); $the_given_params_for_handlers = [ 'seems_wild' => 'OK' ]; $rtn = $chains->chain(function($any_param_here,$seems_wild){ var_dump($any_param_here.' is '.$seems_wild); })->chain(function(){ return "END"; })->data($the_given_params_for_handlers) ->runWild(); var_dump($rtn);

Как мы видим здесь, разница между runWild и run/runWith заключается в том, что runWild поддерживает любые типы обработчиков, и любой обработчик возвращает что-либо, что нарушит цикл и вернёт результат.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Инжект в PHP! Реализация внедрения зависимости в PHP. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/JesusSlim-pinject.git
git@api.gitlife.ru:oschina-mirror/JesusSlim-pinject.git
oschina-mirror
JesusSlim-pinject
JesusSlim-pinject
master