PHP mysqli_result 类实现 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?我想覆盖 Traversable 接口用来返回结果的方法,但它没有定义任何(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 并只返回其中的对象
提前感谢您的帮助和意见