-1

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

}

私のDBクラスは次のとおりです。

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() にアクセスできません。このバグを解決する方法。

4

2 に答える 2

1

使用するよりもDBオブジェクトを注入する方がよいglobal $sql;

しかし、あなたの場合$sqlは、プロパティではなくローカル変数です。コンストラクターで宣言したように、現在のオブジェクトの$this->sqlプロパティにはDBオブジェクトのインスタンスが含まれるようになりました。$sql

したがって、次のようになります。

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

于 2014-05-04T11:21:32.693 に答える
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;
}
}
于 2014-05-04T11:10:21.423 に答える