Php 根据变量更改父类
如何根据某些语句设置父类 范例Php 根据变量更改父类,php,oop,Php,Oop,如何根据某些语句设置父类 范例 $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而不使用
$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
谢谢类是在编译时解析的,而不是在运行时,所以实际上您不能。考虑使用不同的父母们创建2个类,并根据您的代码> $Cwitter 动态地实例化它们。在运行时尝试更改继承层次结构没有多大意义
您预期的方法似乎迫切需要重新思考体系结构。如果
class1
和class2
是不同的类,那么根据定义,它们不应该有太多的共同点,可以与下游子类互换,如果它们确实有很多共同点,则可能指向继承继承权中更高的问题,其中一个可能需要从另一个继承。常识方法是声明两个类,我们称它们为A1
和A2
,一个扩展Class1
,另一个扩展Class2
。然后,您决定要实例化哪一个
但是,如果没有
eval
,您就无法准确地执行您想要的操作。PHP支持匿名函数和闭包,但不支持匿名类。您可以这样做:
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"
斯盖里!只是:不要这样做!:)根据你真正想要实现的目标,有很多真正的解决方案。最简单的是一个非常常见的依赖关系:)
classa{public function}u构造(行为$b){/*您的代码*/}}$a=newa(新行为1)代码>