我刚开始用PHP学习OOP,请原谅我,如果这实际上是一个非常微不足道的问题。
我有一个名为Engine的类,我有类数据库,它扩展了引擎。 我在脚本中调用的一些类也扩展了引擎。 现在我想这样做,以便我不必在我拥有的其他类的每个方法中将$ db的实例设置为global。
我认为解决方案是将MySqlDatabase类设置为静态,但不知怎的,我得到了错误。 有人能告诉我我做错了吗?
这可能是一件非常简单的事情,但我现在已经陷入困境。
提前致谢!
<?php
class MySqlDatabase extends engine{
public static $connection;
public static $query;
function __construct(){
MySqlDatabase::open_connection();
}
public static function open_connection(){
self::$connection=mysqli_connect("localhost","XXX","XXX","XXX");
mysqli_set_charset(self::$connection,'utf8') or die("Charset error");
}
public static function close_connection(){
mysqli_close(self::$connection);
}
public static function con(){
return self::$connection;
}
public static function query($query){
$result = mysqli_query(self::$connection,$query);
self::$query = $result;
self::confirm_query($result);
return $result;
}
public static function confirm_query($result){
if(!$result){
die("DB Query failed:".mysqli_error(self::$connection));
}
}
public static function mysql_prep($string) {
$escaped_string = mysqli_real_escape_string(self::$connection,$string);
return $escaped_string;
}
public static function num_rows(){
$result = mysqli_num_rows(self::$query);
return $result;
}
public static function fetch_array(){
$result = mysqli_fetch_array(self::$query);
return $result;
}
}
?>
现在,当我想从DB获取内容时,我在使用时遇到错误: &#39 ;; ?&GT;
警告:mysqli_query()要求参数1为mysqli,在第39行的/home/devogdata/public_html/includes/dbconnect.php中给出null
警告:mysqli_error()要求参数1为mysqli,在第47行的/home/devogdata/public_html/includes/dbconnect.php中给出null 数据库查询失败:
答案 0 :(得分:3)
构造函数仅在创建对象时调用,当您调用静态方法时,您从类本身(如className::static_method()
)调用它而不是从对象调用它。您必须先手动调用静态方法open_connection,然后再调用查询,以便实例化连接变量。
MySqlDatabase::open_connection();
MySqlDatabase::query('your sql query');
有关静态关键字和方法的更多信息:http://php.net/manual/en/language.oop5.static.php