Objetos que pasa en el error constructor de PHP
-
21-09-2019 - |
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!
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);
}
}