Php Can';t使用$this调用数据库连接

Php Can';t使用$this调用数据库连接,php,mysqli,Php,Mysqli,每当我试图调用Is\u Staff中的$this->dbc时,它都会返回一个错误,并说: Fatal error: Using $this when not in object context 我不太清楚它为什么这样做。 我尝试过让$dbc全球化,但似乎没有任何效果 Class BoardDatabase { public $dbhost = "localhost"; // Host public $dbuser = "root"; // Us

每当我试图调用
Is\u Staff
中的
$this->dbc
时,它都会返回一个错误,并说:

Fatal error: Using $this when not in object context
我不太清楚它为什么这样做。 我尝试过让$dbc全球化,但似乎没有任何效果

Class BoardDatabase {

            public $dbhost = "localhost"; // Host
            public $dbuser = "root"; // Username
            public $dbpass = ""; // Password
            public $dbname = "NecBoard"; // Database

            public function __construct($dbhost, $dbuser, $dbpass, $dbname) {

                $this->dbc = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname) or die("Couldnt connect to the database! " . mysqli_errno);
                if(!$this->dbc) {
                    die("Could not connect to database: " . $this->dbc->connect_errno());
                }
            }

            public static function Is_Staff($type, $bool) {

                if($type == "mod") {
                    if($bool == true) {

                        $IsStaff = $this->dbc->prepare("SELECT is_mod FROM users WHERE id = ?");
                        $IsStaff->bind_param("s", $_SESSION["id"]);
                        $IsStaff->execute();
                        $IsStaff->bind_result($is_mod);

                        $IsStaff->store_result();
                        if($IsStaff->num_rows >= 1) {

                            $IsStaff->fetch();
                            if($is_mod >= 1) {
                                return true;
                            } else {
                                return false;
                            }

                        }

                    } else {
                        return false;
                    }
                }

            }

        }

问题

首先,您正在访问
$dbc
变量作为对象
BoardDatabase
的上下文,而该变量甚至不是对象本身的属性

其次,不能在静态上下文中使用
$this
访问变量

解决方案

将顶部的变量
$dbc
声明为静态变量:

public static $dbc;
并在对象上下文中以这种方式访问它:

self::$dbc

这应该可以解决您的问题。

您尚未在此上下文中声明dbc。如果您想使用另一个类中的dbc对象,那么首先加载该类,然后创建object。为什么有一个静态方法?引用该对象的代码(即调用代码)也是相关的。我的猜测是,您将类用作静态类。在静态类中,
$this->
不起作用;改用
self::$
。然而,混合使用静态和非静态行为并不是一种好的编码实践,在某些情况下,PHP可能会通过通知或警告来实现这一点。