2010-01-21 170 views
4

我在PHP 5.2.9中有一個類層次結構。PHP繼承的數組屬性

基類有一個受保護的屬性,它是一個關聯數組。

子類可以添加一些元素到數組中。

子類在單獨的文件(插件)中聲明,這些文件將由多個開發人員創建和添加。

哪種方法可以將元素添加到子類中的屬性中,以便聲明新的子元素將盡可能簡單?

<?php 
     class A { 
       protected $myproperty = array (
         'A1' => 1, 
         'A2' => 2 
       ); 

       function myprint() 
       { 
         print_r($this->myproperty); 
       } 
     }; 

     class B extends A { 
       // add 'B1', 'B2' to myproperty 
     }; 

     class C extends B { 
       // add 'C1', 'C2' to myproperty 
     }; 

     $c = new C(); 
     $c->myprint(); 
     // The line above should print A1, A2, B1, B2, C1, C2 
?> 

理想情況下,我想使之成爲爲聲明一個變量或私有財產一樣簡單的開發,而不必需要copypaste任何代碼。

回答

3

利用繼承類的constructors的,B類,將成爲是這樣的:

class B extends A { 
    function __construct() { 
     parent::__construct();    // Call constructor of parent class 
     array_push($myproperty, "B1", "B2"); // Add our properties 
    } 
} 

同去的C類

如果你有很多繼承類,或者想要提供儘可能多的支持,您可以將此代碼放入某個函數中。所以其他開發者只需要在他們的構造函數中調用這個函數來'註冊'他們的孩子。

+0

這正是我最初想到的,但有沒有更簡單的方法? – Quassnoi 2010-01-21 11:02:52

+0

你可以嘗試通過使用get_class()來自動完成這個過程,並在類A的構造函數中添加屬性。但是我想這是非常複雜的(至少對你而言)。 – Veger 2010-01-21 11:05:05

+0

如何使用'get_class()'做到這一點? – Quassnoi 2010-01-21 11:09:36