PHP DI(pimple) 사용
나는 이것이 가장 좋은 것인지 전혀 모른다.
독자 대상
디라는 단어를 들어보신 분.
Laavel에서 서비스 용기라는 단어를 들어보신 분.
용어의 정리
DI
외부에서 필요한 인스턴스 가져오기
DI 컨테이너
DI에 편리한 장치, 상자.
설정을 적으면 괜찮을 것 같아요.
주제 밖의 말을 하자면 라벨도 이 조직이 있는데 그걸'서비스 용기'라고 부르는 것 같다.
먼저 DI 모드가 아님
<?php
class Message
{
private $message;
public function __construct()
{
$this->setMessage();
}
private function setMessage (): void
{
$this->message = 'こんにちは世界';
}
public function getMessage(): string
{
return $this->message;
}
}
class Call
{
private $message;
function __construct()
{
// 必要なインスタンスを得るためにクラスの内部でインスタンス化しています。
// 注入にはなっていません。
$this->message = new Message();
}
function callMessage () {
echo $this->message->getMessage();
}
}
$call = new Call();
$call->callMessage();
// こんにちは世界
수동 DI
class Call
{
private $message;
function __construct(Message $message)
{
$this->message = $message;
}
function callMessage () {
echo $this->message->getMessage();
}
}
// ここで手動でインスタンスを注入しています。
$message = new Message();
$call = new Call($message);
$call->callMessage();
// こんにちは世界
수동 DI가 많아지면 곤란할 거야.
class Call
{
private $message;
function __construct(
Message $message,
Message2 $message2,
Message3 $message3
)
{
$this->message = $message;
$this->message2 = $message2;
$this->message3 = $message3;
}
function callMessage () {
echo $this->message->getMessage();
echo $this->message2->getMessage2();
echo $this->message3->getMessage3();
}
}
$message = new Message();
$message2 = new Message2();
$message3 = new Message3();
$call = new Call($message, $message2, $message3);
$call->callMessage();
// こんにちは世界こんにちは日本ハローアメリカ
pimple의 구조기를 사용하여 분사하는 예.구조기에 주입하다.
// インストール
$ ./composer.phar require pimple/pimple ~3.0
<?php
require_once __DIR__.'/vendor/autoload.php';
use Pimple\Container;
$container = new Container();
$container['Message'] = function ($c) {
return new Message();
};
$container['Message2'] = function ($c) {
return new Message2();
};
$container['Message3'] = function ($c) {
return new Message3();
};
// ここでインスタンスをコンテナに入れている感じです。
$container['call'] = function ($c) {
return new Call($c['Message'], $c['Message2'], $c['Message3']);
};
class Call
{
private $message;
function __construct(
Message $message,
Message2 $message2,
Message3 $message3
)
{
$this->message = $message;
$this->message2 = $message2;
$this->message3 = $message3;
}
function callMessage () {
echo $this->message->getMessage();
echo $this->message2->getMessage2();
echo $this->message3->getMessage3();
}
}
// この部分を端折ることができます。
//$message = new Message();
//$message2 = new Message2();
//$message3 = new Message3();
//
//$call = new Call($message, $message2, $message3);
$container['call']->callMessage();
// こんにちは世界こんにちは日本ハローアメリカ
설정 설명량이 많고 편리합니다.이런 느낌이지만 다른 반에서 설정을 쓰려면 쓸 때 주입하면 되기 때문에 편리하다.부산물로서 테스트가 쉬워지고 인터페이스를 사용하여 인터페이스를 주입함으로써 학급 간의 관계를 희소하게 하고 유지보수성을 높일 수 있다.
참고 자료
PIMPLEA simple PHP
Dependency Injection Container
https://pimple.symfony.com/
프레임을 만들면서 Laavel의 아키텍처를 배워요.
https://speakerdeck.com/fendo181/learn-laravels-architecture-while-creating-a-framework?slide=109
Reference
이 문제에 관하여(PHP DI(pimple) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshinyan/items/8ddeaf5511c0936b6ca3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)