我有数据库连接问题。好吧,我在初始化 PDO 连接的地方包含 db.php 文件,然后我检查是否设置了 $err 变量,如果没有,我创建一个新对象并尝试使用一种为我构建链接 ID 的方法。但问题是——这个类中的方法根本看不到 $pdo 对象。索引.phprequire_once 'db.php';if (!isset($err)) { $linkBuilder = new LinkBuilder(); $link = $linkBuilder->buildLink(); // ...}LinkBuilder.class.php<?phpclass LinkBuilder { private $newLink; private function linkInUse($link) { try { $stmt = $pdo->prepare('SELECT * FROM table WHERE link = :link'); $stmt->bindValue(':link', $link); $stmt->execute(); if ($stmt->rowCount() > 0) return true; } catch (PDOException $e) { $err = Constants::DB_ERR; } } public function buildLink() : string { do { $this->newLink = rand(100, 999) . chr(rand(65, 90)) . chr(rand(65, 90)) . chr(rand(65, 90)); } while ($this->linkInUse($this->newLink)); return $this->newLink; }}而且,是否有任何更改可以使此代码更好?
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
您必须将 PDO 对象传入您的类。在现代框架中,这将通过依赖注入来完成。在您的情况下,您可以从向链接构建器类添加构造函数开始。
class LinkBuilder {
private $pdo;
private $newLink;
public function __construct(\PDO $pdo)
{
$this->pdo = $pdo;
}
private function linkInUse($link) {
try {
$stmt = $this->pdo->prepare('SELECT * FROM table WHERE link = :link');
…
您必须将对象的初始化更改为
require_once 'db.php';
if (!isset($err)) {
$linkBuilder = new LinkBuilder($pdo);
$link = $linkBuilder->buildLink();
// ...
}
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消