首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将对象传递到PHP构造函数时出错

将对象传递到PHP构造函数时出错
EN

Stack Overflow用户
提问于 2010-01-17 15:37:00
回答 4查看 4.5K关注 0票数 4

是否可以将对象传递到PHP类的构造函数中,并将该对象设置为全局变量,以便该类中的其他函数可以使用该变量?

例如:

代码语言:javascript
复制
class test {

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

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

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

}

当我尝试这样做的时候,我得到了一个“调用非对象上的成员函数”错误。有没有办法做到这一点?否则,我必须将对象直接传递到每个单独的函数中。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-17 15:39:46

您可能希望将它们赋给$this上的值。

在您的构造函数中,您将执行以下操作:

代码语言:javascript
复制
$this->DB = $arg1;

然后在你的查询函数中:

代码语言:javascript
复制
$this->DB->query(...);

这同样应该通过构造函数的其他参数来完成。

实例上下文中的$this是引用当前实例的方式。还有关键字parent::self::,分别用于访问超类的成员和类的静态成员。

票数 6
EN

Stack Overflow用户

发布于 2010-01-17 18:11:16

顺便说一句。

尽管这不是必需的,但通常认为最好在类中声明成员变量。它可以让你更好地控制它们:

代码语言:javascript
复制
<?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(...);
    }
}
?>

有关privateprotectedpublic之间的区别的详细信息,请参阅PHP: Visibility

票数 3
EN

Stack Overflow用户

发布于 2010-01-17 15:40:48

通过将参数存储为对象的属性,您可以很容易地做到这一点:

代码语言:javascript
复制
function __construct($arg1, $arg2, $arg3) {
   $this->db = arg1;
}

function f()
{
  $this->db->query(...);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2080323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档