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');
}
}