Question

Est-il possible de passer un objet dans le constructeur d'une classe PHP, et définir cet objet comme une variable globale qui peut être utilisé par le reste des fonctions dans la classe?

Par exemple:

class test {

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

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

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

}

Lorsque je tente de le faire, je reçois une erreur « appel à une fonction de membre d'un non-objet ». Est-ce qu'il y a un moyen de faire ça? Sinon, je dois passer les objets dans chaque fonction directement.

Merci!

Était-ce utile?

La solution

Vous voulez probablement les affecter à des valeurs sur $this.

Dans votre constructeur, vous feriez:

$this->DB = $arg1;

Ensuite, dans votre fonction de requête:

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

Cela devrait être fait de la même avec les autres arguments à votre constructeur.

$this dans un contexte d'instance est la façon dont vous faites référence à l'instance en cours. Il y a aussi keywords parent:: et self:: aux membres d'accès des membres superclasse et statiques de la classe, respectivement.

Autres conseils

côté-note ...
Même pensé que ce n'est pas, il est généralement considéré comme requis variables membres à l'intérieur de la classe. Il vous donne un meilleur contrôle sur eux:

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

Voir PHP: Visibilité pour plus de détails sur la différence entre private , protected et public.

vous pouvez le faire assez facilement en stockant l'argument comme une propriété de l'objet:

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

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

disons que vous avez un objet db

$db = new db();

et un autre objet:

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

    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top