好的,这太奇怪了!我正在运行PHP版本5.1.6,当我尝试运行下面的代码时,它给出了一个尚未实例化的对象的致命错误。一旦我取消评论这行代码 // $ cb_db = new cb_db(USER,PASSWORD,NAME,HOST); 一切正常。即使我已经在方法中将$ cb_db对象声明为全局对象。任何帮助将不胜感激。
require_once(ROOT_CB_CLASSES。'db.php');
$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
class cb_user {
protected function find_by_sql( $sql ) {
global $cb_db;
//$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
$result_set = $cb_db->query( $sql );
$object_array = array();
while( $row = $cb_db->fetch_array( $result_set ) ) {
$object_array[] = self::instantiate( $row );
}
return $object_array;
}
}
答案 0 :(得分:2)
如果你打算使用全局变量(而不是通过构造函数传递连接),你应该确保它是全局编辑的,你计划使用它。
Global $cb_db;
$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
class cb_user {
protected function find_by_sql( $sql ) {
global $cb_db;
//$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
$result_set = $cb_db->query( $sql );
$object_array = array();
while( $row = $cb_db->fetch_array( $result_set ) ) {
$object_array[] = self::instantiate( $row );
}
return $object_array;
}
}
但是,我认为更好的方法是通过构造函数传递数据库连接。
$cb_db = new cb_db(USER, PASSWORD, NAME, HOST);
$cb_user = new cb_user($cb_db);
class cb_user {
public __construct(cb_db $database)
{
$this->database = $database
}
protected function find_by_sql( $sql ) {
$this->database = new cb_db(USER, PASSWORD, NAME, HOST);
$result_set = $cb_db->query( $sql );
$object_array = array();
while( $row = $cb_db->fetch_array( $result_set ) ) {
$object_array[] = self::instantiate( $row );
}
return $object_array;
}
}
如果您发现这是使用该连接的唯一函数,您也可以将其传递给单个函数(find_by_sql($sql, $cb_db)
)。