2

我如何设置父类取决于某些语句?

例子

$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

谢谢

4

3 回答 3

5

类是在编译时解析的,而不是运行时解析的,所以实际上你不能. 考虑改为创建 2 个具有不同父级的类,并根据您的$switcher. 尝试在运行时更改继承层次结构没有多大意义。

您的预期方法似乎急需重新思考架构。如果class1class2是不同的类,那么根据定义,它们不应该有太多共同点,可以与下游子类互换,如果它们确实有很多共同点,则可能指向继承层次结构中更高的问题,其中一个可能是需要从另一个继承。

于 2013-01-16T21:16:47.567 回答
1

The common sense approach would be the one of declaring two classes, let's call them A1 and A2, one extending Class1, the other extending Class2. Then, you decide which one you want to instantiate.

However you can't do exactly what you want it without eval. PHP supports anonymous functions and closures, but doesn't support anonymous classes.

于 2013-01-16T21:17:12.650 回答
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"
于 2013-01-16T21:20:26.603 回答