2013-03-04 75 views
3

PDO::FETCH_CLASS允許使用預填充數據初始化類實例。它看起來是這樣的:在構造函數被調用之前,PDO :: FETCH_CLASS如何填充對象屬性?

<?php 
class Bar { 
    private $data = []; 

    public function __construct ($is) { 
     // $is === 'test' 
     // $this->data === ['foo' => 1, 'bar' => 1] 
    } 

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

$db 
    ->query("SELECT `foo`, `bar` FROM `qux`;") 
    ->fetchAll(PDO::FETCH_CLASS, 'Bar', ['test']); 

另外,可以使用PDO::FETCH_PROPS_LATE來調用構造函數被觸發setter方法之前。

我很想知道PDO如何在調用構造函數之前通過setter填充Class實例,或者更具體地說,如果有一種方法可以複製此行爲?

回答

0

對於這個工作,我這樣做:

我在超這個聲明魔術方法

public function __set($name, $value) { 
    $method = 'set' . str_replace('_', '', $name); //If the properties have '_' and method not 
    if (method_exists($this, $method)) { 
     $val = call_user_func(array($this, $method), $value); 
    } 
} 

它工作得很好,我

相關問題