PHP mysqli_result類實現了Traversable接口一段時間。 這給像下面這段代碼一些有趣的可能性:PHP mysqli_result:使用帶有fetch_object的Traversable接口
<?php
$db = new mysqli('...');
$result = $db->query('...');
foreach($result as $row) {
//$row is an associative array containing the fetched values
}
現在,我很喜歡這個漂亮多了,但我目前工作的圖書館我想有對象牽強,不關聯陣列。我也希望能夠一類傳遞給它,這樣我就可以創建一個簡單的模型系統,它
對於我擴展它是這樣的:
<?php
class mysqli_result_extension extends mysqli_result {
protected $result_class;
public function set_result_class($class) { $this->result_class = $class; }
public function function_to_overwrite() {
return $this->fetch_object($this->result_class);
}
}
我的問題,我想問你:
如何從FETCH_ASSOC現在切換fetch_object到? 我想覆蓋的可通過接口,以便返回結果使用方法,但它並沒有定義任何(http://php.net/manual/en/class.traversable.php)
所以,我需要以覆蓋從FETCH_ASSOC切換到fetch_object和可以到我的$ result_class傳遞給它,以便我能夠做這樣的事:
<?php
$db = new mysqli_extension('...');
$posts = $db->query('select * from posts');
//$result is object of type mysqli_result_extension
$posts->set_result_class('post');
foreach($posts as $post) {
//$post is an instance of class 'post'
}
我不想髒東西,像哈克FETCH_ASSOC覆蓋,只是在它返回對象
謝謝提前爲您提供幫助並輸入
您可以切換到PDO嗎?不知道如何在MySQLi中做到這一點,但很容易做到你想要的PDO。只需設置'PDO :: ATTR_DEFAULT_FETCH_MODE'屬性,並在執行foreach循環時執行適當的提取類型。 – SDC
這將是一個很好的解決方案,如果我也能夠指定結果對象的類。我搜查了PDO的文件,但找不到方法。擴展PDOStatement類的Afaik導致與擴展mysqli_result相同的問題,因爲它也實現了Traversable – Torben
是的,你可以。我將以代碼的形式發佈它。 – SDC