有人可能会争辩说,由于潜在的不一致,这可能是不好的做法,但是,我想知道如何(如果可能的话)告诉一个类扩展另一个类,但前提是要对它进行定义。

我知道这是行不通的,但是我要有效地解决的是:

class MyClass extends (class_exists('OtherClass') ? OtherClass : null)

或者,如果存在该类,则可能会在constructor中运行以设置扩展的函数。

我当然想避免..
if(class_exists('OtherClass'))
{
    class MyClass extends OtherClass
    {
        //The class
    }
}
else
{
    class MyClass
    {
        //The class
    }
}

..由于大量的代码重复。

我一直在Google及其网站上寻找答案,但一无所获-如果我重复了一个问题,请告诉我。

最佳答案

您可以创建在class_exists()条件内创建的中间人类,但没有其自己的行为:

if (class_exists('OtherClass')) {
    class MiddleManClass extends OtherClass { }
} else {
    class MiddleManClass { }
}

class MyClass extends MiddleManClass {
    // The class code here
}

这使类层次结构包含一个以上的类,但是没有重复的代码(实际上没有代码),并且MyClass内部的方法可以按通常的方式通过OtherClassparent::到达$this(如果可用)。

10-08 19:25