이 기사를 읽기 전에 다음 사항을 숙지해야 합니다. PHP 구문, 객체 지향
전체 소프트웨어 프로젝트 개발을 완료하는 과정에서, 때로는 여러 사람이 협력해야 할 때도 있고, 때로는 독립적으로 완료할 수도 있습니다. 어떤 유형이든 코드의 양이 늘어나면 작성할 때 "통제 불능"이 되고 점차 "추악한 인터페이스 , 더러운 구현"으로 인해 프로젝트 유지 비용과 어려움이 증가합니다. , 지속 불가능할 정도로 재구성하거나 재개발하는 것이 유일한 선택입니다.
1단계가설 시나리오: 세션, 데이터베이스, 파일 시스템을 동시에 운영할 수 있는 처리 클래스를 작성해야 합니다. 우리는 이것을 쓸 수도 있습니다. 영역 기능: 실행할 수 있지만 심각하게 결합되어 있습니다.class DB{ public function DB($arg1,$arg2){ echo 'constructed!'.PHP_EOL; } } class FileSystem{ public function FileSystem($arg1,$arg2){ echo 'constructed!'.PHP_EOL; } } class Session{ public function Session($arg1,$arg2){ echo 'constructed!'.PHP_EOL; } } class Writer{ public function Write(){ $db=new DB(1,2); $filesystem=new FileSystem(3,4); $session=new Session(5,6); } } $writer=new Writer(); $writer->write();
class DB{ public function DB($arg1,$arg2){ echo 'constructed!'.PHP_EOL; } } class FileSystem{ public function FileSystem($arg1,$arg2){ echo 'constructed!'.PHP_EOL; } } class Session{ public function Session($arg1,$arg2){ echo 'constructed!'.PHP_EOL; } } class Writer{ protected $_db; protected $_filesystem; protected $_session; public function Set($db,$filesystem,$session){ $this->_db=$db; $this->_filesystem=$filesystem; $this->_session=$session; } public function Write(){ } } $db=new DB(1,2); $filesystem=new FileSystem(3,4); $session=new Session(5,6); $writer=new Writer(); $writer->Set($db,$filesystem,$session); $writer->write();
class Container{ public $bindings; public function bind($abstract,$concrete){ $this->bindings[$abstract]=$concrete; } public function make($abstract,$parameters=[]){ return call_user_func_array($this->bindings[$abstract],$parameters); } }
$container=new Container(); $container->bind('db',function($arg1,$arg2){ return new DB($arg1,$arg2); }); $container->bind('session',function($arg1,$arg2){ return new Session($arg1,$arg2); }); $container->bind('fs',function($arg1,$arg2){ return new FileSystem($arg1,$arg2); });
class Writer{ protected $_db; protected $_filesystem; protected $_session; protected $container; public function Writer(Container $container){ $this->_db=$container->make('db',[1,2]); $this->_filesystem=$container->make('session',[3,4]); $this->_session=$container->make('fs',[5,6]); } } $writer=new Writer($container);
위 내용은 PHP 디커플링의 세 가지 영역에 대해 자세히 알아보기(서비스 컨테이너에 대한 간략한 논의)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!