4

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

例如:

class test {

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

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

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

}

当我尝试执行此操作时,我收到“调用非对象的成员函数”错误。有没有办法做到这一点?否则,我必须将对象直接传递给每个单独的函数。

谢谢!

4

4 回答 4

6

您可能希望将它们分配给$this.

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

$this->DB = $arg1;

然后在您的查询功能中:

$this->DB->query(...);

这应该与构造函数的其他参数类似地完成。

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

于 2010-01-17T07:39:46.153 回答
3

作为旁注......
即使认为这不是必需的,通常认为最好在类中声明成员变量。它使您可以更好地控制它们:

<?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:可见性privateprotectedpublic

于 2010-01-17T10:11:16.443 回答
1

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

function __construct($arg1, $arg2, $arg3) {
   $this->db = arg1;
}

function f()
{
  $this->db->query(...);
}
于 2010-01-17T07:40:47.773 回答
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);

    }

}
于 2012-09-13T05:59:28.073 回答