用于依赖项注入的PHP嵌套静态变量访问
我希望使用此模式在代码中启用依赖项注入。 我觉得它符合动态语言的playdoh特性[1]用于依赖项注入的PHP嵌套静态变量访问,php,dependency-injection,static-variables,Php,Dependency Injection,Static Variables,我希望使用此模式在代码中启用依赖项注入。 我觉得它符合动态语言的playdoh特性[1] class A { static $FOO = 'Foo'; function __construct() { $this->foo = self::$FOO::getInstance(); } } A::$FOO = 'MockFoo'; $a = new A(); 不幸的是,这不起作用,我得到: Parse error: syntax error, unexpected T
class A {
static $FOO = 'Foo';
function __construct() {
$this->foo = self::$FOO::getInstance();
}
}
A::$FOO = 'MockFoo';
$a = new A();
不幸的是,这不起作用,我得到:
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in [test.php] on line 6
我可以创建一个临时变量来欺骗解析器,但是还有其他方法吗
function __construct() {
$FOO = self::$FOO;
$this->foo = $FOO::getInstance();
}
[1] 试试看
$class = self::$FOO;
$this->foo = $class::getInstance();
试一试
没有其他语法可以实现这一点。您需要一个临时变量来欺骗解析器。没有替代语法来完成此操作。您需要一个临时变量来欺骗解析器。也许这是可行的:
$this->foo={self::$foo}::getInstance()代码>,但我不知道。然而,我想知道这应该是什么样的依赖注入?注入全球状态?所以在本例中,我使用的是一个类似于rails的遗留框架,它使用了大量广泛使用的静态类。因此,假设我必须调用Foo::getInstance(),并且我不能在整个应用程序/测试套件中完全替换Foo(并且我不能更改构造函数参数),有没有其他方法来注入Foo的实例?$this->Foo={self:::$Foo}::getInstance()会导致“语法错误,意外的”{”这是PHP5.3.2可能是这样的:$this->foo={self::$foo}::getInstance();
,但我不知道。但是我想知道这应该是什么样的依赖注入?注入全局状态?会有点多余。因此,在本例中,我正在使用一个类似rails的遗留框架,该框架使用大量普遍使用的静态类。因此假设我必须调用Foo::getInstance(),我不能在整个应用程序/测试套件中完全替换Foo(我也不能更改构造函数参数),还有其他方法可以注入Foo实例吗?$this->Foo={self::$Foo}::getInstance()导致“语法错误,意外的“{”,这是PHP5.3.2