-3

私は自分のサイトを PDO に変換していますが、約 200 のスクリプトの後、終わりに近づいています。すべてのスクリプトは、同じ関数スクリプトにアクセスします。関数スクリプト内には、次のようなデータベース クラスがあります。

class Database {
    private $db_con = ''; //stores the connection

    public function db_login(){
        //log into the database
    }
    public function db_control($query, $params){
        //run the query
    }
}
//initiate the class and log in
$db = new Database();
$db->db_login();

これらの関数は両方とも正常に機能し、すべてのタイプのクエリに対して機能するため、ほぼ終了しました。しかし、私は問題に遭遇しました。

スクリプト内で数回使用される、作業中のスクリプトにスタンドアロン関数があります。私は通常、db_control を実行します。

$results = $db->db_control($query, $params);

ただし、関数内から実行する:

function func(){
    $results = $db->db_control($query, $params);
}

エラーを返します。

致命的なエラー: 39 行目の C:....php の非オブジェクトでメンバー関数 db_​​control() を呼び出します

私は何を間違っていますか?この関数が削除されると、スクリプトの他のクエリが正常に機能するため、クラスは確実に開始されます。スタンドアロン関数内から db_control() にアクセスするにはどうすればよいですか?

ありがとう、
ジョー

4

4 に答える 4

2

$db関数スコープ内では使用できません。

$db引数として渡す

function func($db, $query, $params){
    return $db->db_control($query, $params);
}
$results = func($db, $query, $params);

または

function func($query, $params){
    global $db;
    return $db->db_control($query, $params);
}
$result = func($query, $params);

関数内で使用globalできるようにするために使用します。おそらく他の解決策もあります!

于 2012-12-18T11:47:31.897 に答える
1

$db関数内から呼び出された場合はスコープ外です。$db関数に引数として渡すことができます

function func($db){

globalひどく悪い方法もあります:

function func(){
    global $db; // $db is now accessible
于 2012-12-18T11:47:15.907 に答える
1

変数のスコープについて学びます。変数$dbは関数内で宣言されていないため、関数内には存在しません。渡す必要があります。

于 2012-12-18T11:47:22.740 に答える
1

$db をグローバルとして開始しました :/

あなたがこれをやりたくない理由はたくさんありますが、主に私が少し時間が足りないため、ここでは触れません.純粋主義者が以下にコメントするのを待ちます. しかし、簡単な修正は追加することです。

global $db

これまでで最も理想的な状況ではありませんが、問題を解決する必要があります。

于 2012-12-18T11:50:07.410 に答える