Passaggio di oggetti nell'errore del costruttore PHP
-
21-09-2019 - |
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!
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);
}
}