6.1 代理
Minor提供了一個類似於java中InvocationHandler接口和一個Proxy類的代理模式的實現,具體可參考我的這篇文章:http://www.cnblogs.com/orlion/p/5350752.html
6.1.1 使用
class FooController extends Controller { public function bar($productName) { $log = new LogHandler(); $shop = new Shop(); $shopProxy = Proxy::newProxyInstance($shop, $log); $shopProxy->buy($productName); } }
<?php namespace App\Lib; use Minor\Proxy\InvocationHandler; class LogHandler implements InvocationHandler { public function invoke($target, \ReflectionMethod $method, Array $args = []) { $this->before(); $result = $method->invokeArgs($target, $args); $this->after(); return $result; } public function before() { echo '[LogHandler] before<br/><br/>'; } public function after() { echo '[LogHandler] after<br/><br/>'; } }
<?php namespace App\Lib; class Shop { private $mail = null; public function boot(MailProvider $mail) { $this->mail = $mail; } public function buy($productName) { echo '[Shop] buy ' . $productName . '<br/><br/>'; !is_null($this->mail) && $this->mail->send('DemoUser'); } }