4

オブジェクトを PHP クラスのコンストラクターに渡し、そのオブジェクトをクラス内の残りの関数で使用できるグローバル変数として設定することは可能ですか?

例えば:

class test {

   function __construct($arg1, $arg2, $arg3) {
      global $DB, $ode, $sel;

      $DB = arg1;
      $ode = arg2;
      $sel = $arg3;
   }

   function query(){
      $DB->query(...);
   }

}

これを実行しようとすると、「オブジェクト以外のメンバー関数への呼び出し」エラーが発生します。とにかくこれを行うことはありますか?それ以外の場合は、オブジェクトを個々の関数に直接渡す必要があります。

ありがとう!

4

4 に答える 4

6

上の値にそれらを割り当てたいと思うでしょう$this

コンストラクターでは、次のようにします。

$this->DB = $arg1;

次に、クエリ関数で:

$this->DB->query(...);

これは、コンストラクターへの他の引数でも同様に行う必要があります。

$thisインスタンスコンテキストでは、現在のインスタンスを参照する方法です。スーパークラスのメンバーとクラスの静的メンバーにそれぞれアクセスするためのキーワードparent::ともあります。self::

于 2010-01-17T07:39:46.153 に答える
3

補足として...
これは必須ではありませんが、一般的にはクラス内でメンバー変数を宣言するのが最善と考えられています。それらをより適切に制御できます。

<?php
class test {
    // Declaring the variables.
    // (Or "members", as they are known in OOP terms)
    private $DB;
    protected $ode;
    public $sel;

    function __construct($arg1, $arg2, $arg3) {
      $this->DB = arg1;
      $this->ode = arg2;
      $this->sel = $arg3;
    }

    function query(){
      $this->DB->query(...);
    }
}
?>

との違いの詳細については、PHP : 可視性を参照してください。privateprotectedpublic

于 2010-01-17T10:11:16.443 に答える
1

あなたがdbオブジェクトを持っているとしましょう

$db = new db();

および別のオブジェクト:

$object = new object($db);

class object{

    //passing $db to constructor
    function object($db){

       //assign it to $this
       $this-db = $db;

    }

     //using it later
    function somefunction(){

        $sql = "SELECT * FROM table";

        $this->db->query($sql);

    }

}
于 2012-09-13T05:59:28.073 に答える
1

引数をオブジェクトのプロパティとして保存することで、非常に簡単に実行できます。

function __construct($arg1, $arg2, $arg3) {
   $this->db = arg1;
}

function f()
{
  $this->db->query(...);
}
于 2010-01-17T07:40:47.773 に答える