我正在尝试使用其中包含数据库连接的现有类来在新类中进行调用。这是我的代码:
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课程?
答案 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();
}
}
}