danielgsims/staticproxy

本包最新版本(1.0.2)没有提供许可信息。

静态类代理的轻量级实现

1.0.2 2015-12-21 14:41 UTC

This package is auto-updated.

Last update: 2024-09-17 02:19:36 UTC


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