$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();