来自Class的数据库调用失败

时间:2016-06-05 10:02:58

标签: php database

我正在尝试使用其中包含数据库连接的现有类来在新类中进行调用。这是我的代码:

class ajaxHandler {

protected static $db;

function __construct() {
  if (!class_exists('Db')) {
      include "db_class.php";
      $db = new Db();
  }
}

function show_contest_details ($contest_id){
  echo "The contest id is: ".$contest_id;
  $event__conetest_details = $db->select("SELECT * FROM FF_CREATE_EVENT");
} // end of show_contest_details function

}

我收到以下错误:

Notice: Undefined variable: db in /var/www/ajax_class.php on line 18

Fatal error: Call to a member function select() on a non-object in /var/www/ajax_class.php on line 18

如何在此课程中使用我的DB课程?

2 个答案:

答案 0 :(得分:2)

您忘记了self::

class ajaxHandler {

  protected static $db;

  function __construct() {
      if (!class_exists('Db')) {
        include "db_class.php";
      }
      self::$db = new Db();
  }

  function show_contest_details ($contest_id){
    echo "The contest id is: ".$contest_id;
    $event__conetest_details = self::$db->select("SELECT * FROM FF_CREATE_EVENT");
  } // end of show_contest_details function

}

第二件事,最好是在条件块之外移动代码创建Db的实例。您可能会在其他地方意外包含Db,然后ajaxHandler将停止工作,您将无法轻易理解原因。

答案 1 :(得分:1)

您使用class_exists()来测试您是否已创建数据库。这是不正确的。 class_exists()检查是否已经定义了类,这在PHP加载文件后是真的,而不是在创建了类的第一个实例之后。你需要的是:

class ajaxHandler {

protected static $db;

  function __construct() {
    if (is_null(self::$db)) {
      include "db_class.php";
      self::$db = new Db();
    }
  }
}