PHP使数据库类静态

时间:2016-03-10 14:22:00

标签: php database class oop static

我刚开始用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   数据库查询失败:

1 个答案:

答案 0 :(得分:3)

构造函数仅在创建对象时调用,当您调用静态方法时,您从类本身(如className::static_method())调用它而不是从对象调用它。您必须先手动调用静态方法open_connection,然后再调用查询,以便实例化连接变量。

   MySqlDatabase::open_connection();
   MySqlDatabase::query('your sql query');

有关静态关键字和方法的更多信息:http://php.net/manual/en/language.oop5.static.php