Pergunta

É possível passar um objeto para o construtor de uma classe PHP, e definir o objeto como uma variável global pode ser usada pelo resto de funções na classe?

Por exemplo:

class test {

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

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

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

}

Quando tento fazer isso, recebo uma "Chamada para uma função de membro em um não-objeto" de erro.Existe uma maneira de fazer isso?Caso contrário, eu tenho que passar os objetos em cada indivíduo função diretamente.

Obrigado!

Foi útil?

Solução

Você provavelmente deseja atribuí -los a valores em $this.

No seu construtor, você faria:

$this->DB = $arg1;

Então, na sua função de consulta:

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

Isso deve ser feito da mesma forma com os outros argumentos ao seu construtor.

$this Em um exemplo, o contexto é como você faz referência à instância atual. Há também palavras -chave parent:: e self:: acessar membros da superclasse e membros estáticos da classe, respectivamente.

Outras dicas

Como um lado-observação...
Mesmo que este não é necessário, ele é geralmente considerado o melhor para declarar variáveis de membro dentro da sala de aula.Ele dá a você um melhor controle sobre eles:

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

Ver PHP:Visibilidade para mais detalhes sobre a diferença entre private, protected e public.

Você pode fazer isso com bastante facilidade, armazenando o argumento como uma propriedade do objeto:

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

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

Digamos que você tenha um objeto DB

$db = new db();

E outro 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top