微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 了解OOP – 如何在其他类中使用PDO连接

我想我在理解OOP如何工作方面遇到了问题.我已经改变了它的工作代码,但它不是我认为的方式.下面的场景(不,我不是自己创建一个userlogin,它真的只是本地开发人员更好地理解OOP):

我有一个database.PHP文件

class Database {

    /* Properties */
    private $conn;
    private $dsn = 'MysqL:dbname=test;host=127.0.0.1';
    private $user = 'root';
    private $password = '';

    /* Creates database connection */
    public function __construct() {
        try {
            $this->conn = new PDO($this->dsn,$this->user,$this->password);
        } catch (PDOException $e) {
            print "Error!: " . $e->getMessage() . "";
            die();
        }
        return $this->conn;
    }
}

所以在这个类中我创建了一个数据库连接并返回连接(对象?)

然后我有第二个类,着名的User类(实际上我不使用自动加载,但我知道它):

include "database.PHP";

class User {
    /* Properties */
    private $conn;

    /* Get database access */
    public function __construct() {
        $this->conn = new Database();
    }

    /* Login a user */
    public function login() {
        $stmt = $this->conn->prepare("SELECT username,usermail FROM user");
        if($stmt->execute()) {
            while($rows = $stmt->fetch()) {
                $fetch[] = $rows;
            }
            return $fetch;
        }
        else {
            return false;
        }
    }
}

所以这是我的两个班级.没有什么大的,如你所见.现在,不要忘记函数名称登录 – 实际上我只是尝试从数据库中选择一些用户名用户邮件显示它们.我尝试通过以下方式实现:

$user = new User();
$list = $user->login();

foreach($list as $test) {
    echo $test["username"];
}

这就是问题所在.当我执行此代码时,我收到以下错误消息:

Uncaught Error: Call to undefined method Database::prepare()

而且我不确定我是否真的明白导致此错误的原因.

当我更改以下内容时,代码运行良好:

将database.PHP中的$conn更改为public而不是private(我认为那很糟糕……?但是当它私有时,我只能在Database类中执行查询,我是对的?所以我应该把所有这些查询放入数据库类?我认为这很糟糕,因为在一个大项目中它会变得非常大..)

要做的第二个改变是:
在user.PHP文件中更改$this-> conn->准备$this-> conn-> conn-> prepare.在这里,我真的不知道为什么.

我的意思是,在user.PHP的构造函数中,我有一个$this-> conn = new Database(),因为新的数据库会从DB类返回连接对象,我真的不知道为什么有是第二个conn->

如果有人能够更好地解释我,我会非常感激.我知道变量的可见性,我已经阅读了很多关于它的内容,但我认为我现在还不了解它,否则我不会遇到这个问题.

感谢每一位建议!

原文地址:https://www.jb51.cc/php/135413.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐