2013-06-24 45 views
0

例如一個通用的填充方法,我有兩類:寫作幾類在PHP 5.3

class A { 
    protected $x, $y; 
} 

class B { 
    protected $x, $z; 
} 

在它們中的每我需要一種方法來從陣列填充數據。所以,因爲可以編寫一個通用填充器,所以我想編寫一次代碼。

在5.4,我相信特點可以使它能夠寫出像成才

protected function fill(array $row) { 
    foreach ($row as $key => $value) { 
    $this->$$key = $value; 
    } 
} 

,只是使用它。

但我該如何在5.3中做到這一點?

+2

公共基類是不是一種選擇? – complex857

+0

所以在這兩個類中創建一個參數化的構造函數... –

+0

嘗試將'$ this - > $$ key'更改爲'$ this - > {$ key}'。 –

回答

2

使用抽象類和具有共享功能的類擴展它

abstract class Base 
{ 
    protected function fill(array $row) { 
     foreach ($row as $key => $value) { 
      $this->{$key} = $value; 
     } 
    } 
} 

class A extends Base { 
    protected $x, $y; 
} 

class B extends Base { 
    protected $x, $z; 
} 
+0

我試過這個,但是因爲我使用$ this->這裏,它在父類中尋找變量,我假設。因此,與這樣的試驗:' $值){$ 這 - > $$鍵= $值; } } } class A extends Base { protected $ x,$ y; } $ a = new A(); (array'(x'=>'1','y'=>'2')); var_dump($ a); '我得到了PHP注意:Undefined變量:x在/var/www/html/model/test.php上線7 PHP致命錯誤:無法訪問/var/www/html/model/test.php中的空屬性第7行 –

+0

使用'$ this - > {$ key} = $ value'的形式,可變變量的東西不會在這裏工作(可能PHP解析器怪癖,我不知道)。 – complex857

+0

@ complex857謝謝,這真的有效! –