danielgsims / staticproxy
本包最新版本(1.0.2)没有提供许可信息。
静态类代理的轻量级实现
1.0.2
2015-12-21 14:41 UTC
Requires (Dev)
- phpunit/phpunit: 4.3.*
README
StaticProxy 是一个轻量级类,充当调用静态方法的代理。当您希望注入一个实例而不是直接调用静态方法时,可以使用 StaticProxy。
class Foo
{
public static function doSomething()
{
return "do something";
}
}
$s = new StaticProxy("Foo");
$s->doSomething();
#为什么使用?
有时候,您有一个仅使用静态方法才能工作的依赖项
class MyController
{
public function index(Request $request)
{
Validator::validate($request);
//do something
}
}
理想情况下,您希望避免使用静态方法以使代码更松散耦合。您可以使用代理来实现这一点。
class MyController
{
private $validator;
public function __construct(StaticProxy $validator)
{
$this->validator = $validator;
}
public function index(Request $request)
{
$this->validator->validate($request);
}
}
当您需要将静态调用与代码解耦,但无法重写依赖项,或没有创建单独适配器的手段时,此类非常有用。
#别名
在上面的示例中,我们必须指定我们正在使用静态代理,但这并不理想。相反,我们可以使用 Aliaser 来注册 StaticProxy 的别名。
class MyController
{
private $validator;
public function __construct(Acme\Validator $validator)
{
$this->validator = $validator;
}
public function index(Request $request)
{
$this->validator->validate($request);
}
}
$a = new Aliaser;
$a->register("Acme\Validator");
$s = new StaticProxy("Foo");
$c = new MyController($s);