2013-06-26 22 views
4

有些人可能会认为由于潜在的不一致性,这可能是不好的做法,但是,我想知道如何(如果可能)我可以告诉一个类扩展另一个类,但只有当它定义。只有在定义了其他类时才扩展PHP类

我知道这并不工作,但什么我有效后:

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

或许会在constructor运行一个函数来设置如果类存在扩展。

我当然想避免..

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

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

我在谷歌和网站上寻找答案,但没有发现 - 如果我有重复的问题,但是,请让我知道。

回答

8

您可以创建这就是class_exists()条件中创造了一个中间人类,但没有它的ONW行为:

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

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

这使得类层次结构包括一个或多个类,但没有重复的代码(有没有代码实际上)和MyClass内的方法可以通过parent::$this如平常一样到达OtherClass

+0

当然可以!我在脑海里伪造了类似这样的东西,但是不能编造任何有用的东西。干杯。 – SmokeyPHP

+0

昨天我看到相同的代码在我工作的一个项目的遗留代码中。 然后我很在意如何做更好的方法来做这个操作。 我认为有几种解决方案尊重PHP的标准。 另外,我无法看到此解决方案可能导致的问题,例如:autoload,apc等。 谢谢。 – davidselo