传递对象到PHP构造错误
-
21-09-2019 - |
题
是否有可能将对象传递到一个PHP类的构造,并设定对象为可以由功能的其余部分中的类使用的全局变量?
例如:
class test {
function __construct($arg1, $arg2, $arg3) {
global $DB, $ode, $sel;
$DB = arg1;
$ode = arg2;
$sel = $arg3;
}
function query(){
$DB->query(...);
}
}
当我尝试这样做,我得到一个“调用一个成员函数的非对象”的错误。反正有做到这一点?否则,我必须的对象直接进入每个独立的功能。
谢谢!
解决方案
您可能想将它们分配到值上$this
。
在你的构造函数,你会怎么做:
$this->DB = $arg1;
然后在您的查询功能:
$this->DB->query(...);
这同样应与其他参数来完成,以你的构造。
$this
在一个实例上下文是您如何引用当前实例。分别还有关键字parent::
和self::
超类的访问成员和类的静态成员。
其他提示
作为一个侧面记事...,点击 甚至认为这不是需要,它通常被认为是最好的声明构件里面的类变量。它可以让你更好地控制他们:
<?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:对于细节可见上private
之间的差,protected
和public
。
可以通过存储参数作为对象的属性做很容易地
function __construct($arg1, $arg2, $arg3) {
$this->db = arg1;
}
function f()
{
$this->db->query(...);
}
让我们假设你有一个数据库对象
$db = new db();
和另一个目的:
$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);
}
}
不隶属于 StackOverflow