2010-04-29 56 views
2

我已經得到了這個小小的代碼片段,我希望能夠將每個數組元素定義爲新的數據成員。在構造函數中定義數據成員

class Core_User 
{ 
    protected $data_members = array(
     'id'    => '%d', 
     'email'   => '"%s"', 
     'password'   => '"%s"', 
     'title'   => '"%s"', 
     'first_name'  => '"%s"', 
     'last_name'  => '"%s"', 
     'time_added'  => '%d' , 
     'time_modified' => '%d' , 
     ); 

    function __construct($id = 0, $data = NULL) 
    { 
     foreach($this->data_members as $member){ 
      //protected new data member 
     } 

    } 

回答

0

//保護的新的數據成員

您將無法在運行時創建一個非公共財產。如果保護的是最重要的,你可以聲明一個受保護的數組或對象,並在構造函數中插入鍵/值到它

0

你想達到什麼是可能的,但是你將無法使新屬性protected(因爲這是唯一可能的預定義的成員)。

function __construct($id = 0, $data = NULL) 
{ 
    foreach($this->$data_memebers as $name => $value){ 
     $this->$name = $value; 
    } 
} 

注意使用$之前name$this->$name:這使得PHP使用$name變量屬性的當前值。

0
  1. 總是使用$這個時候你要訪問對象的成員(應該在$這個 - > data_members構造函數)。 (
  2. 你可以嘗試定義魔法方法__get & __set(我不確定它們是否可以被保護)。 :

    protected function __get($name){     
    if (array_key_exists($name,$this->data_memebers)) 
    { 
        return $this->data_memebers[$name]; 
    }   
    throw new Exception("key $name doesn't not exist"); 
    } 
    protected function __set($name,$value){ 
    if (array_key_exists($name,$this->data_memebers)) 
    { 
        $this->data_memebers[$name] = $value; 
    } 
    throw new Exception("key $name doesn't not exist"); 
    } 
    
相關問題