gpt4 book ai didi

php - 在 PHP 中包含类中心文件的方法

转载 作者:行者123 更新时间:2023-11-29 03:28:18 25 4
gpt4 key购买 nike

我的类(class)用户试图访问 $db 对象。

问题是类用户在将 $db 对象包含在我的中央文件 loader.inc.php 中后找不到它。如果我在每个函数/方法中包含 connect.php,它就可以工作,但我想要一个集中的方式来包含我的所有类和文件。

用户.class.php

class user {

public function login($username, $password) {
$username = $db->real_escape_string($username);
$password = hash('sha256', $password);
$stmt = "SELECT username, activation FROM users WHERE username='$username' AND password='$password';";
$result = $db->query($stmt);
$count_row = $result->num_rows;
if ($count_row == 1) {
$userdata = $result->fetch_array(MYSQLI_ASSOC);
if ($userdata['activation'] == 0) {
return false;
} else {
return true;
}
} else {
return false;
}
}
}

连接.php

require_once 'config.php';
require_once 'loader.inc.php';

$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if (mysqli_connect_errno()) {
print mysqli_connect_errno();
} else {
$db->query("SET NAMES utf8");
}

loader.inc.php

require_once 'connect.php';
require_once 'user.class.php';

我知道此处显示的包含函数并不安全,但我仅将此脚本用于测试目的。

真诚的

约翰内斯

最佳答案

你有一个 variable scope问题。

    public function login($username, $password) {
$username = $db->real_escape_string($username);
...

$db 未在 login() 方法的范围内定义。

有几种方法可以解决这个问题(比如将数据库作为参数发送给方法等),但 OOP 中一个常见的方法是使用依赖注入(inject):当你实例化一个用户对象时,你将数据库对象作为一个参数传递给构造函数并在用户对象上设置一个属性。然后您可以在该类(class)的任何地方使用它。

一个简单的例子:

class user {
private $db;

public function __construct($db) {
$this->db = $db;
}

public function login($username, $password) {
$username = $this->db->real_escape_string($username);
...

关于php - 在 PHP 中包含类中心文件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com