我有一个从名为db的基类扩展的应用程序类。当我尝试创建一个实例时,我得到错误
在非对象上调用成员函数query()。
我的应用程序类是:
Class Application extends DB
{
public $sql;
/*
* Public Methods
*/
/*
* Constructor
*/
function Application() {
global $sql;
$sql = db::getInstance();
}
function selectSqli($access_table){
$result = $sql->query("select * from $access_table");
return $result;
}
}
我的数据库类是:
class db extends mysqli{
protected static $instance;
protected static $options = array();
private function __construct() {
$db = self::$options;
// turn of error reporting
mysqli_report(MYSQLI_REPORT_OFF);
// connect to database
@parent::__construct(isset($db['host']) ? $db['host'] : 'localhost',
isset($db['user']) ? $db['user'] : 'root',
isset($db['pass']) ? $db['pass'] : '',
isset($db['dbname']) ? $db['dbname'] : 'angler_blog_post');
// check if a connection established
if( mysqli_connect_errno() ) {
throw new exception(mysqli_connect_error(), mysqli_connect_errno());
}
}
public static function getInstance() {
if( !self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
public function query($query) {
if( !$this->real_query($query) ) {
throw new exception( $this->error, $this->errno );
}
$result = new mysqli_result($this);
return $result;
}
}
我尝试过全局,但是我无法访问函数query()。如何解决这个错误。
答案 0 :(得分:1)
您应该比使用global $sql;
但在你的情况下,$sql
是一个局部变量,而不是属性。正如您在构造函数$this->sql
中声明的那样:当前对象的属性$sql
现在包含一个DB对象的实例。
所以,它应该是:
function selectSqli($access_table){
$result = $this->sql->query("select * from $access_table");
return $result;
}
而且,你可能不知道有关PHP 5的一些新闻,因为使用方法名称类似于类名来实现构造函数,在PHP 5中你应该使用一个特殊的方法__construct() {}
来构造函数
在OOP中查看PHP 5中的新功能:http://www.php.net/manual/en/language.oop5.php
答案 1 :(得分:0)
function selectSqli($access_table){
global $sql;
$result = $sql->query("select * from $access_table");
return $result;
}
或者如果您使用OOP:
Class Application extends DB
{
public $sql;
/*
* Public Methods
*/
/*
* Constructor
*/
function Application() {
$this->sql = db::getInstance();
}
function selectSqli($access_table){
$result = $this->sql->query("select * from $access_table");
return $result;
}
}