2012-10-29 54 views
0
class Student{ 

$db_fields = array('id','firstname','lastname') 

} 

有什麼辦法來設置$ db_fields陣列成一個公共變量/屬性,而無需輸入其手動像:SET數組作爲公共屬性

class Student{ 

    $db_fields = array('id','firstname','lastname') 

    public $id; 
    public $firsname; 
    public $last; 
} 

我想使用foreach來設置它,但是我無法完成它。

回答

0

是的,你可以用魔術方法__get__set(這些方法被用來訪問實例變量不可訪問。你可以在文檔的詳細信息)在Student類。

public function __get($name) { 
    return $this->{$name}; 
} 

public function __set($name, $value){ 
    $this->{$name} = $value; 
} 

現在你可以使用它:

$obj = new Student(); 
$obj->db_fields = array(1,2,3); //Assign private variable. 
var_dump($obj->db_fields); //Get private variable. 
1
class Student{ 

    public $db_fields; 

    public $id; 
    public $firsname; 
    public $last; 

    public function __construct($data){ 
     $this->db_fields = $data; 
    } 
} 

$students = new Student(array('id','firstname','lastname')); 

您可以設置它這樣.. 或這樣..

class Student{ 

     public $db_fields; 

     public $id; 
     public $firsname; 
     public $last; 

     public function set_db_fields($data){ 
      $this->db_fields = $data; 
     } 
    } 

    $students = new Student(); 
    $students->set_db_fields(array('id','firstname','lastname')); 

的想法是,當你調用該類設置一些函數的變量.. 第一種方法是使用構造函數,第二種方法是寫1功能只爲..

第三種方式是作爲@ PLB與魔術功能重播。

+0

我的意思是我不想設置公共$ id; public $ firsname; public $ last; 我只是想將數組字段設置爲公共變量。 – arjay0601

+0

@ arjay0601只是爲了澄清:你想要做一些事情:'$ instanceOfStudent-> id',它返回數組中關鍵'id'的相關值:'$ db_fields = array('id'=> 1,... )'? – Leri

+0

@PLB已經寫了正確的方法.. 我曾經如何反對這樣的方法來添加變量,而這些變量在類中不存在..第一,如果由於某種原因,其他開發人員和第二代人將無法理解您的代碼你的代碼會跳過這些變量中的任何一個,任何依賴於它的類函數都將失敗,因爲它根本不存在.. – Svetoslav

0

訪問數組的變量的唯一方法是通過陣列(據我所知)這樣:

$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe'); 
echo $db_fields->id; // would print 5. 

你想要什麼你說的是:

$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe'); 
echo $id; // would print 5 but that is not possible 

的唯一實例在這裏工作的是,如果你正在談論的數組是$ _POST和$ _GET與註冊全局變量,但據我所知,這是不可能做到這一點與任何數組(事實上,它通常不建議做,即使$ _POST和$ _GET數組)。

編輯:

實際上,你可以使用提取物()函數陣列上。

$db_fields = array('id' => 5,'firstname' => 'Paul', 'lastname' => 'Doe'); 
extract($db_fields); 
echo $id; // if I'm not mistaken, that should work