【问题标题】:Extend PHP Class only if other class is defined仅在定义了其他类时才扩展 PHP 类
【发布时间】:2013-06-23 21:00:50
【问题描述】:

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

我知道这不起作用,但我真正想要的是:

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 和网站上寻找答案,但一无所获 - 如果我重复了一个问题,请告诉我。

【问题讨论】:

    标签: php class oop extend


    【解决方案1】:

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

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

    这使得类层次结构包含更多类,但没有重复代码(实际上没有代码),MyClass 中的方法可以通过parent::$this 像往常一样到达OtherClass(如果可用) .

    【讨论】:

    • 当然可以!我在脑海中对类似的东西进行伪编码,但无法编造任何有用的东西。干杯。
    • 昨天我在我正在工作的一个项目的遗留代码中看到了相同的代码。然后我在措辞如何更好地进行该操作。我认为有几种解决方案尊重 PHP 的标准。另外,我看不到此解决方案可能导致的问题,例如:自动加载、apc 等。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2012-03-11
    • 2019-03-05
    相关资源
    最近更新 更多