Domanda

È possibile passare un oggetto al costruttore di una classe PHP e impostare quell'oggetto come variabile globale che può essere utilizzata dal resto delle funzioni della classe?

Per esempio:

class test {

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

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

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

}

Quando provo a farlo, ricevo un errore "Chiama a una funzione membro su un non oggetto".C'è un modo per fare questo?Altrimenti devo passare gli oggetti direttamente in ogni singola funzione.

Grazie!

È stato utile?

Soluzione

Probabilmente si desidera assegnarle ai valori su $this.

nel costruttore, faresti:

$this->DB = $arg1;

Poi, nel tuo funzione di query:

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

Questo dovrebbe essere fatto in modo simile con gli altri argomenti al costruttore.

$this in un contesto istanza è come si fa riferimento l'istanza corrente. C'è anche le parole chiave parent:: e self:: per accedere ai membri della superclasse e membri statici della classe, rispettivamente.

Altri suggerimenti

Come nota a margine...
Anche se non lo era necessario, è generalmente considerato meglio dichiarare variabili membro all'interno della classe.Ti dà un migliore controllo su di loro:

<?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(...);
    }
}
?>

Vedere PHP:Visibilità per i dettagli sulla differenza tra private, protected E public.

è possibile farlo abbastanza facilmente memorizzando l'argomento come una proprietà dell'oggetto:

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

function f()
{
  $this->db->query(...);
}

diciamo che dispone di un oggetto db

$db = new db();

e un altro oggetto:

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

    }

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top