PDO PHP提取类
我正在学习PHP中的pdo,以便使数据库访问更容易,更高效。我已经读取了_class的一个解释,那就是在构造函数被调用之前,对象的属性被设置。这是什么意思? 任何方向,不胜感激。
这意味着当使用PDO将结果返回到自定义对象时,需要设置与查询结果键对应的成员variables。
如:
class User { //Predefine Here public $id; public $username; public $password; public $email; public $hash; public function profileLink() { return sprintf('<a href="/profile/%s">%s</a>',$this->id,$this->username); } } $result = $sth->fetchAll(PDO::FETCH_CLASS, "User"); foreach($result as $user) { echo $user->profileLink(); }
这样,PDO可以将variables设置为其内部范围之外的对象。
如果你的用户类是这样的:
class User { }
那么PDO将无法设置范围之外的值,因为没有定义属性。
假设你有这样的代码瑕疵
<?php class Foo { public $bar; public function __construct() { $this->bar = 1; } } $stmt = $dbh->prepare("SELECT bar FROM foo"); $stmt->setFetchMode(PDO::FETCH_CLASS, 'Foo'); $stmt->execute(); $obj = $stmt->fetch() ?>
$ obj的条形图将被设置为“1”,而不是从数据库中提取的。
如果您希望将其设置为数据库的结果而不是“1”,则可以将获取模式更改为
$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Foo');
这会导致构造函数在将结果分配给属性之前被调用
回顾PDO :: FETCH_CLASS,你并不需要将variables定义为public或private(从PHP 7.0开始),你可以定义一个空类,PHP PDO将把属性填充为$ Class->属性,即使他们没有定义。
这是非常有用的,因为您可以重复使用具有多个查询的类来处理同一个表,但可能会返回不同的列