Passando Objetos em PHP construtor erro
-
21-09-2019 - |
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!
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);
}
}