如何在php中调用成员函数query()?

时间:2013-03-28 20:07:21

标签: php mysqli

我有一个从名为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()。如何解决这个错误。

2 个答案:

答案 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;
}
}