PHP OOP - $pdo 变量在类的函数中不存在

我有数据库连接问题。


好吧,我在初始化 PDO 连接的地方包含 db.php 文件,然后我检查是否设置了 $err 变量,如果没有,我创建一个新对象并尝试使用一种为我构建链接 ID 的方法。但问题是——这个类中的方法根本看不到 $pdo 对象。


索引.php


require_once 'db.php';

if (!isset($err)) {         

    $linkBuilder = new LinkBuilder();

    $link = $linkBuilder->buildLink();


    // ...

}

LinkBuilder.class.php


<?php


class 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;

    }



}


而且,是否有任何更改可以使此代码更好?


千万里不及你
浏览 122回答 1
1回答

白板的微信

您必须将 PDO 对象传入您的类。在现代框架中,这将通过依赖注入来完成。在您的情况下,您可以从向链接构建器类添加构造函数开始。class LinkBuilder {&nbsp; &nbsp; private $pdo;&nbsp; &nbsp; private $newLink;&nbsp; &nbsp; public function __construct(\PDO $pdo)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $this->pdo = $pdo;&nbsp; &nbsp; }&nbsp; &nbsp; private function linkInUse($link) {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $stmt = $this->pdo->prepare('SELECT * FROM table WHERE link = :link');…您必须将对象的初始化更改为require_once 'db.php';if (!isset($err)) {&nbsp; &nbsp; $linkBuilder = new LinkBuilder($pdo);&nbsp; &nbsp; $link = $linkBuilder->buildLink();&nbsp; &nbsp; // ...}
打开App,查看更多内容
随时随地看视频慕课网APP