更改父类取决于变量

时间:2013-01-16 21:14:46

标签: 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

的情况下使用eval

由于

3 个答案:

答案 0 :(得分:5)

在编译时解析类,而不是运行时,因此实际上不能。请考虑使用不同的父项创建2个类,并根据$switcher动态实例化它们。尝试在运行时更改继承层次结构没有多大意义。

您想要的方法似乎迫切需要重新考虑架构。如果class1class2是不同的类,那么根据定义它们应该没有多少共同点可以与下游子类互换,如果它们有很多共同之处,它可能指向继承层次更高的问题,其中一个可能需要从另一个继承。

答案 1 :(得分:1)

常识方法是声明两个类,让我们称之为A1A2,一个扩展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"