如何在函数内部使用DB类的实例


How to use the instance of DB class inside functions?

这是我的DB类。(DB.php)

<?php
    class DB {
        protected $db_name = "data_db";
        protected $db_user = "root";
        protected $db_pass = "root";
        protected $db_host = "localhost";
        public function __construct() {
            $this->mysqli = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
        }
        public function __destruct() {
            $this->mysqli->close();
        }
    }
?>

这是我的users.php文件。

<?php
    require_once "core/DB.php";
        function user_data() {
            global $db;
            $db = new DB();
            $data = array();
            $session_user_id = $_SESSION["user_id"];
            $data_row = $db->mysqli->query("SELECT * FROM `users` WHERE `user_id` = '$session_user_id'");
            $data = $data_row->fetch_assoc();
            return $data;
    }
?>

我如何在我的函数中使用db类的$db实例?我应该只调用实例一次,然后使它成为一个全局变量在所有函数中使用?

请不要使用全局变量

尝试使用单例模式

class DB {
    protected $db_name = "data_db";
    protected $db_user = "root";
    protected $db_pass = "root";
    protected $db_host = "localhost";
    public static function getInstance()
    {
        static $instance = null;
        if (is_null($instance)) {
            $instance = new DB();
        }
        return $instance;
    }
    public function __construct() {
        $this->mysqli = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name);
    }
    public function __destruct() {
        $this->mysqli->close();
    }
}

在你的函数中你可以这样使用

function user_data() {
    $db = DB::getInstance();
    $data = array();
    $session_user_id = $_SESSION["user_id"];
    $data_row = $db->mysqli->query("SELECT * FROM `users` WHERE `user_id` = '$session_user_id'");
    $data = $data_row->fetch_assoc();
    return $data;
}

只要调用DB::getInstance()就可以得到你的类的相同实例