【问题标题】:PHP Making database class staticPHP 使数据库类静态化
【发布时间】:2016-03-10 14:21:59
【问题描述】:

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

我有一个名为 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;
 }

}

?>

现在,当我想从数据库中获取某些内容时,我会在使用时遇到错误: '; ?>

警告: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 数据库查询失败:

【问题讨论】:

  • 调用静态方法时,不使用__construct()函数

标签: php database class oop static


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2011-02-19
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多