10

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

我知道这不起作用,但我真正追求的是:

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

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

我当然想避免..

if(class_exists('OtherClass'))
{
    class MyClass extends OtherClass
    {
        //The class
    }
}
else
{
    class MyClass
    {
        //The class
    }
}

..因为大量的代码重复。

我在谷歌和网站上寻找答案,但一无所获——如果我重复了一个问题,请告诉我。

4

1 回答 1

16

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

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

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

这使得类层次结构包含一个更多的类,但没有重复的代码(实际上没有代码),并且如果它可用,内部的方法MyClass可以到达OtherClasswithparent::或像往常一样。$this

于 2013-06-26T16:09:33.397 回答