$class = new class();
$class->fun()mysql
依賴注入模式用來減小程序間的耦合sql
着重說下setter方法注入並結合ArrayAccessapi
/** * Class Di * @property People */ class Di implements ArrayAccess { /** * 單例 * @var null */ protected static $instance = null; /** * 註冊的服務 * @var array */ protected $data = array(); public function __construct() { echo '__construct'. "\n"; } public function onConstruct(){ echo 'onConstruct'. "\n"; } public static function one(){ if (self::$instance == null) { self::$instance = new Di(); self::$instance->onConstruct(); } return self::$instance; } public function get($name, $default = NULL) { if (!empty($default)) { return $default; } return $this->data[$name]; } public function set($name, $value) { $this->data[$name] = $value; } public function __get($name) { return $this->get($name); } public function __set($name, $value) { $this->set($name, $value); } /** ArrayAccess數組訪問接口 **/ public function offsetSet($offset, $value) { $this->set($offset, $value); } public function offsetGet($offset) { return $this->get($offset, NULL); } public function offsetUnset($offset) { unset($this->data[$offset]); } public function offsetExists($offset) { return isset($this->data[$offset]); } } class People { protected $name = '測試'; public function getName(){ return $this->name; } } class Email { public function sendEmail($email){ return '郵件發送成功!'; } } $di = Di::one(); /** @var get set 方式訪問 people */ $di->people = new People(); $people = $di->people; echo $di->people->getName(); /** 經過數組的方式訪問 **/ $di['Email'] = new Email(); echo $di['Email']->sendEmail('33@qq.com');
Phalapi也是經過該方式實現依賴注入
依賴注入至關於一個註冊中心,經過魔術方法__set __get進行賦值和取之操做,$di->email
implements ArrayAccess 能夠實現經過數組的方式進行操做$di['Email']
經過__construct出入類數組
class a { public function test() { echo 'test'; } } class c { protected $s; public function __construct($a) { $this->s = $a; } public function test(){ $this->s->test(); } } $a = new a(); $c = new c($a); $c->test();
interface sql{ public function connect(); public function query(); } class mysql implements sql { public function connect() { echo '鏈接mysql成功'. "\n"; } public function query() { // TODO: Implement query() method. } } class sqlServe implements sql { public function connect() { echo '鏈接sqlServe成功'. "\n"; } public function query() { // TODO: Implement query() method. } } class Demo{ public $sql; public function __construct(sql $sql) { $this->sql = $sql; } } $mysql = new mysql(); $sqlServe = new sqlServe(); (new Demo($mysql))->sql->connect();