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"]; } 这就是问题所在.当我执行此代码时,我收到以下错误消息:
而且我不确定我是否真的明白导致此错误的原因. 当我更改以下内容时,代码运行良好: 将database.php中的$conn更改为public而不是private(我认为那很糟糕……?但是当它私有时,我只能在Database类中执行查询,我是对的?所以我应该把所有这些查询放入数据库类?我认为这很糟糕,因为在一个大项目中它会变得非常大..) 我要做的第二个改变是: 我的意思是,在user.php的构造函数中,我有一个$this-> conn = new Database(),因为新的数据库会从DB类返回连接对象,我真的不知道为什么有是第二个conn-> 如果有人能够更好地解释我,我会非常感激.我知道变量的可见性,我已经阅读了很多关于它的内容,但我认为我现在还不了解它,否则我不会遇到这个问题. 感谢每一位建议! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |