每当我试图在$this->dbc
中致电Is_Staff
时,都会返回错误消息:
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;
}
}
}
}
答案 0 :(得分:2)
<强>问题强>
首先,当$dbc
变量甚至不是对象本身的属性时,您将访问BoardDatabase
变量作为对象$this
的上下文。
其次,您无法在静态上下文中使用$dbc
访问变量。
<强>解决方案强>
将顶部的变量public static $dbc;
声明为静态变量:
self::$dbc
并在对象上下文中以这种方式访问它:
type beantype =
| Bool
| Int
| TLr of fieldsrec
| TId of ident
and fieldsrec = { fields : field list }
and field =
| FIe of (ident * beantype)
这可以解决您的问题。