Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于依赖项注入的PHP嵌套静态变量访问_Php_Dependency Injection_Static Variables - Fatal编程技术网

用于依赖项注入的PHP嵌套静态变量访问

用于依赖项注入的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

我希望使用此模式在代码中启用依赖项注入。 我觉得它符合动态语言的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_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