嘿伙计们(和女孩们?)我想知道是否可以优雅地将PDO查询的结果映射到类中的数组成员,而不是让它们作为该对象的公共属性浮动.
说我有(浓缩)以下内容:
class DBObject {
protected
$record = array();
function __construct(array $record) {
if(!empty($record)) {
$this->loadRecord($record);
}
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想使用从数据库传递的值数组调用构造函数,而不是使用__set或任何其他奇怪的方法.所以使用PDO现有的API会很棒.
我目前的粗略get_all功能已经达到了这个目的:
static function get_all() {
$class = get_called_class();
$results = DB::factory()->query('SELECT * FROM ' . $class . ' ORDER BY ID');
$results->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, $class);
return $results;
}
Run Code Online (Sandbox Code Playgroud)
注意:我正在通过PDO运行PHP 5.3和MySQL,并且已经知道使用__set可以解决这个问题,但我明确地希望避免使用它来支持更高性能的东西.
删除了之前的代码
class DBObject {
protected $record = array();
function __construct($record = null) {
if(null === $record){
$obj_vars = get_object_vars($this);
$cls_vars = get_class_vars(get_class($this));
$this->$record = array_diff_key($obj_vars, $cls_vars);
}else{
$this->record = $record;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这样做的问题是这些值仍然可以作为公共成员使用。但它要做的是将“预定义”(类)成员与实际(对象)成员进行比较。
由于 PDO 将在对象中创建新成员,因此您可以使用 array_diff_key 来获取“新”成员。
是的,这仍然不会将它们传递给您的构造函数。
| 归档时间: |
|
| 查看次数: |
5126 次 |
| 最近记录: |