是否可以将对象传递给PHP类的构造函数,并将该对象设置为可供类中其余函数使用的全局变量?
例如:
class test {
function __construct($arg1, $arg2, $arg3) {
global $DB, $ode, $sel;
$DB = arg1;
$ode = arg2;
$sel = $arg3;
}
function query(){
$DB->query(...);
}
}
当我尝试这样做时,我得到一个“对非对象调用成员函数”错误。反正有没有这样做?否则,我必须直接将对象传递给每个单独的函数。
谢谢!
答案 0 :(得分:6)
您可能希望将它们分配给$this
上的值。
在你的构造函数中,你会这样做:
$this->DB = $arg1;
然后在你的查询功能中:
$this->DB->query(...);
这应该与构造函数的其他参数类似地完成。
实例上下文中的 $this
是您引用当前实例的方式。还有关键字parent::
和self::
分别访问超类的成员和类的静态成员。
答案 1 :(得分:2)
作为附注......
即使认为这不是 required ,通常认为在类中声明成员变量是最好的。它可以让你更好地控制它们:
<?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(...);
}
}
?>
有关private
,protected
和public
之间差异的详细信息,请参阅PHP: Visibility。
答案 2 :(得分:1)
通过将参数存储为对象的属性,您可以非常轻松地完成它:
function __construct($arg1, $arg2, $arg3) {
$this->db = arg1;
}
function f()
{
$this->db->query(...);
}
答案 3 :(得分:1)
假设你有一个db对象
$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);
}
}