Frage

Ist es möglich, ein Objekt in den Konstruktor einer PHP -Klasse zu übergeben und dieses Objekt als globale Variable festzulegen, die vom Rest der Funktionen in der Klasse verwendet werden kann?

Zum Beispiel:

class test {

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

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

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

}

Wenn ich dies versuche, bekomme ich einen Fehler "Aufruf an eine Mitgliedsfunktion auf einem Nicht-Objekt" -Fehler. Gibt es trotzdem? Andernfalls muss ich die Objekte direkt in jede individuelle Funktion übergeben.

Vielen Dank!

War es hilfreich?

Lösung

Sie möchten sie wahrscheinlich Werten aufweisen $this.

In Ihrem Konstruktor würden Sie:

$this->DB = $arg1;

Dann in Ihrer Abfragefunktion:

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

Dies sollte in ähnlicher Weise mit den anderen Argumenten an Ihren Konstruktor erfolgen.

$this In einem Instanzkontext verweisen Sie auf die aktuelle Instanz. Es gibt auch Schlüsselwörter parent:: und self:: Zugang zu Mitgliedern der Superklasse bzw. statische Mitglieder der Klasse.

Andere Tipps

Als Anmerkung...
Ich dachte sogar, das sei nicht erforderlich, Es wird allgemein als am besten angesehen erklären Mitgliedsvariablen innerhalb der Klasse. Es gibt Ihnen eine bessere Kontrolle über sie:

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

Sehen PHP: Sichtbarkeit Für Einzelheiten zum Unterschied zwischen private, protected und public.

Sie können es ziemlich leicht tun, indem Sie das Argument als Eigenschaft des Objekts speichern:

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

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

Angenommen, Sie haben ein DB -Objekt

$db = new db();

und ein anderes Objekt:

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

    }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top