Вопрос

Можно ли передать объект в конструктор класса 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(...);
    }
}
?>

Видеть PHP: видимость Для получения подробной информации о разнице между private, protected а также public.

Вы можете сделать это довольно легко, сохранив аргумент как свойство объекта:

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

    }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top