Pregunta

¿Es posible pasar un objeto en el constructor de una clase PHP, y establecer que el objeto como una variable global que puede ser utilizado por el resto de las funciones en la clase?

Por ejemplo:

class test {

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

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

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

}

Cuando trato de hacer esto, aparece un "Llamar a una función miembro en un no-objeto" de error. ¿Hay alguna forma de hacer esto? De lo contrario, tengo que pasar los objetos en cada función individual directamente.

Gracias!

¿Fue útil?

Solución

Es posible que desee asignarlos a los valores de $this.

En el constructor, que haría:

$this->DB = $arg1;

A continuación, en su función de consulta:

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

Esta forma similar se debe hacer con los otros argumentos para el constructor.

$this en un contexto instancia es cómo se hace referencia a la instancia actual. También hay keywords parent:: y self:: a los miembros de acceso de la superclase y miembros estáticos de la clase, respectivamente.

Otros consejos

Como nota lateral ...
Incluso considera que no es es obligatorio , que generalmente se considera la mejor manera de declarar variables miembro dentro de la clase. Se le da un mejor control sobre ellos:

<?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: Visibilidad para obtener más información sobre la diferencia entre private , protected y public.

lo puede hacer muy fácilmente almacenando el argumento como una propiedad del objeto:

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

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

digamos que tiene un objeto db

$db = new db();

y otro objeto:

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

    }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top