2013-06-26 63 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