2

重複の可能性:
致命的なエラー: 非オブジェクトに対するメンバー関数 query() の呼び出し

私はクラスファイルを持っています。それを「もの」と呼びましょう

Stuff.class

中にクラスがあります

class  Stuff {

そしてそこにパブリック静的関数があります

   public static function morestuff() {

}

内部では、クエリのために別の関数を呼び出す必要があります

$q="Select from contacts where id =". $this->$db->escapeVal($ID)".";

しかし、エラーが発生します。

$q="Select from contacts where id =". escapeVal($ID)".";

戻り値

Call to undefined function escapeVal()


$q="Select from contacts where id =". $db->escapeVal($ID)".";

戻り値

Call to a member function escapeVal() on a non-object


$q="Select from contacts where id =". $this->$db->escapeVal($ID)".";

戻り値

Using $this when not in object context 

それで、私は何を入れますか?

編集:

同じファイル内の同様の関数には、次のコードがあります

'id' = '" . $this->db->escapeVal($this->_Id) . "'

ただし、mysql クエリでこのコードを使用しようとすると、次のエラーが発生します。

Using $this when not in object context
4

4 に答える 4

0

それ$dbはグローバル変数だと思うので、試してみてください

public static function morestuff() {
      global $db;

      $q="Select from contacts where id =". $db->escapeVal($ID);

}

関数が同じクラスにあり、静的でもある場合は、次のように呼び出します

self::escapeVal($ID);
于 2012-07-09T19:27:04.653 に答える
0

OOP の概念を理解していません。現在のオブジェクト (またはこのオブジェクト$this)を参照する変数です。意味:

class Test {
    public function __construct() { //Called when object is instantiated
        var_dump($this);
    }
}
$test = new Test();

あなたは似たようなものを得るでしょう

object(Test)#1 (0) { }

$thisクラス メソッドの外では使用できません。それはそのようには機能しません。

発生しているエラーについて、データベース接続がどこに保存されているかを調べてみてください。その接続は、フィールドとして保存するためにオブジェクトに渡すか、メソッドに直接渡して内部的に処理する必要があります。

プログラミングは、機能するコードをコピー/貼り付けすることではありません。

于 2012-07-09T19:38:41.573 に答える
0

関数は静的であるため、変数$thisはその中に存在しません。

問題を解決するには、2 つの解決策があります。

  1. 静的$db変数を作成します。つまり、すべてのインスタンスで同じになります。
  2. static関数からキーワードを削除しますmorestuff()。この場合、 を呼び出すためにクラスのインスタンスを作成する必要がありますmorestuff()
于 2012-07-09T19:39:08.427 に答える
0
$Stuff->db->escapeVal($id)

働き始めました。うまくいきました。ありがとうございます。

于 2012-07-09T20:38:16.913 に答える