滚动
在类中的使用
查询可以通过用户自定义类来提取为对象。例如,如果我们有一个名为 ExampleClass 的类,下面的查询将返回 exampleClass 类型的对象。
$result = $connection->query("SELECT id, title FROM {example_table}", [], [
'fetch' => 'ExampleClass',
]);
如果类中有 __construct() 方法,对象会被创建,属性会被添加到对象中,然后调用 __construct() 方法。例如,如果你有以下类和查询:
class ExampleClass {
function __construct() {
// 执行一些操作
}
}
$result = $connection->query("SELECT id, title FROM {example_table}", [], [
'fetch' => 'ExampleClass',
]);
对象会被创建,属性 id 和 title 会被添加到对象中,然后执行 __construct()。这些事件的顺序与 PHP 中的一个错误(版本低于 5.2)有关。
如果对象中存在 __construct() 方法,并且需要在属性添加到对象之前执行,可以按以下示例操作:
$result = $connection->query("SELECT id, title FROM {example_table}");
foreach ($result->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'ExampleClass') as $record) {
// 执行一些操作
}
传递给 fetchAll 的参数可以以相同方式使用。PDO::FETCH_CLASS 告诉 fetchAll 将返回的结果集作为属性添加到 ExampleClass 类型的对象中(第二个参数)。PDO::FETCH_PROPS_LATE 告诉 fetchAll 在调用 __construct() 之后再将结果集作为属性添加到对象。