【发布时间】:2017-05-10 18:51:27
【问题描述】:
我正在尝试学习 OOP php,并且在开发登录/注册系统时,我注意到我在用户类的每个函数中都调用了数据库类。
例如,像这样:
<?php
class Users {
public function signUp($username, $email, $password){
$db = new Database;
$dbh = $db->connect();
$sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";
try {
$query = $dbh->prepare($sql);
$query->execute(array($username, $email, $password));
echo 'succ';
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
基本上,在不复制整个文件的情况下,我有一些函数可以与数据库一起使用,并且在每个函数中我都必须调用这两行:
$db = new Database;
$dbh = $db->connect();
所以我在互联网上查找了有关 spl_autoload_register 的信息。它在大多数情况下工作得很好,但是我似乎无法像这样替换上面的两行:
$db = new Database;
$dbh = Database::connect();
当我从我的数据库类中得到另一个错误时:
在 D:\xampp\htdocs\PHP 中不在对象上下文中时使用 $this OOP\customSystem\Classes\Class.Database.php 第 24 行
第24行是这个函数的返回
public function connect(){
return $this->conn;
}
我现在不知道该做什么,但它也不能解决我最初在每个函数中调用 Database 类的问题。那么,我需要做什么?
【问题讨论】:
-
Class.Database.php的邮政编码 -
利用构造函数
-
Database::connect() 表示类静态方法。您的 IDE 应该警告您混合实例和静态上下文。
$db->connect()可以与您的代码一起使用,因为 $db 是数据库的一个实例。 -
是的,$db->connect() 有效,但我想使用 spl_autoload_register 函数并避免在每个函数中调用 Database 类。或者如果我这样做可以吗?