如何设置父类取决于某些语句?
实施例
$switcher = true;
if($switcher) {
class a extends class1{
...
}
else {
class a extends class2 {
...
}
我需要这样的东西
$myclass = $switcher ? 'class1' : 'class2';
class a extends $myclass { //sure this will not work
但如何在没有$myclass
eval
由于
答案 0 :(得分:5)
在编译时解析类,而不是运行时,因此实际上不能。请考虑使用不同的父项创建2个类,并根据$switcher
动态实例化它们。尝试在运行时更改继承层次结构没有多大意义。
您想要的方法似乎迫切需要重新考虑架构。如果class1
和class2
是不同的类,那么根据定义它们应该没有多少共同点可以与下游子类互换,如果它们做有很多共同之处,它可能指向继承层次更高的问题,其中一个可能需要从另一个继承。
答案 1 :(得分:1)
常识方法是声明两个类,让我们称之为A1
和A2
,一个扩展Class1
,另一个扩展Class2
。然后,您决定要实例化哪一个。
但是如果没有eval
,你无法完全按照自己的意愿行事。 PHP支持匿名函数和闭包,但不支持匿名类。
答案 2 :(得分:0)
你可以这样做:
class MyCommon {}
class MyClassA extends MyCommon {}
class MyClassB extends MyCommon {}
$switcher = true;
if ($switcher) {
$myinstance = new MyClassA();
} else {
$myinstance = new MyClassB();
}
var_dump($myinstance instanceof MyCommon); // true, because of inheritance
var_dump($myinstance instanceof MyClassA); // true
var_dump($myinstance instanceof MyClassB); // false
var_dump(get_class($myinstance)); // "MyClassA"