PHPのコンストラクタエラーにオブジェクトを渡します
-
21-09-2019 - |
質問
クラスの関数の残りの部分で使用することができるグローバル変数として
はPHPクラスのコンストラクタにオブジェクトを渡すことができ、セットオブジェクトその 例えば、
class test {
function __construct($arg1, $arg2, $arg3) {
global $DB, $ode, $sel;
$DB = arg1;
$ode = arg2;
$sel = $arg3;
}
function query(){
$DB->query(...);
}
}
私はこれをしようとすると、は、私がエラー「非オブジェクトのメンバ関数へのコール」を得ます。これを行うには、とにかくありますか?そうでなければ、私が直接、個々の機能にオブジェクトを渡す必要があります。
ありがとうございます。
解決
あなたはおそらく$this
上の値にそれらを割り当てたい。
あなたのコンストラクタでは、あなたがしたい:
$this->DB = $arg1;
次に、あなたのクエリ機能でます:
$this->DB->query(...);
これは、同様にあなたのコンストラクタに他の引数を指定して実行する必要があります。
インスタンスコンテキストで$this
は、現在のインスタンスを参照する方法です。 parent::
とself::
は、それぞれ、アクセススーパークラスのメンバーとクラスの静的メンバにキーワードもあります。
他のヒント
サイドノートとして
...
でも、これはのではないと思った。の、それは一般的に、クラス内のの宣言のメンバ変数に最善と考えられている必要がありました。それはあなたがそれらをより良好に制御することができます:
<?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(...);
}
}
?>
private
の違いの詳細については、可視性で: あなたは、オブジェクトのプロパティとして引数を格納することで、かなり簡単にそれを行うことができます:
function __construct($arg1, $arg2, $arg3) {
$this->db = arg1;
}
function f()
{
$this->db->query(...);
}
あなたが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);
}
}
所属していません StackOverflow