PHP使数据库类静态化

标签 php database class oop static

我刚开始学习 PHP 中的 OOP,如果这实际上是一个非常微不足道的问题,请原谅我。

我有一个名为 Engine 的类,我有类数据库,它扩展了 engine。 我在脚本中调用的一些类也扩展了引擎。 现在我想这样做,这样我就不必在我拥有的其他类的每个方法中都将 $db 的实例设置为全局。

我认为解决方案是将 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;
 }

}

?>

现在,当我想从数据库中获取一些东西时,我会在使用时出错: '; ?>

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/devogdata/public_html/includes/dbconnect.php on line 39

Warning: mysqli_error() expects parameter 1 to be mysqli, null given in /home/devogdata/public_html/includes/dbconnect.php on line 47 DB Query failed:

最佳答案

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

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

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

关于PHP使数据库类静态化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919067/

相关文章:

java - 当我在运行时只能在字符串变量中找到类的名称时,如何使用该类?

php - 当我在自动建议搜索框中输入时没有生成建议

php - 更新后获取以前的值 - MySql

php - 如何在html中隐藏不需要的空白

android - android 的 abc.db 和 abc.sqlite 有什么区别?

sql - 对于数小时的操作,数据库设计的好方法是什么?

c++ - 在 cuda/c++ 代码中使用模板类

c++ - 具有私有(private)数据成员的内联类函数

javascript - 文件并不总是使用 PHP 和 Javascript 上传到服务器

mongodb - 哪种 NoSQL DB 最适合 OLTP 金融系统?