在变量中存储抽象类的引用


PHP Store reference to abstract class in variable

1)是否可以像这样在变量中存储对抽象类的引用:

abstract class A implements X {}
$A = A; //This doesn't work

2)最终,我希望能够将对抽象类的引用传递给方法或函数。

class Y { public function __construct(X $X){} }
$Y = new Y($A);

如果能做这样的事情就更令人满意了:

abstract class A { public static $staticProperty; }
class Y {
    public function __construct($X){
        echo $X::$staticProperty; //Doesn't work
    }
}
$Y = new Y('A');

由于不能实例化抽象类,因此只能使用静态属性(和常量)。从PHP 5.3开始,您可以使用变量来指定查询的类,只有以下限制:

从PHP 5.3.0开始,可以使用变量。变量的值不能是关键字(例如self, parent和静态)。

所以你可以传递一个类名;它将作为一个抽象类的锚。例如(demo):

abstract class Foo { static $bar = 5; }
abstract class Bah { static $bar = 6; }
function echoBar($classname) {
   echo $classname::$bar;
}
echoBar('Foo'); // 5
echoBar('Bah'); // 6