“超全球对象”

时间:2010-09-15 20:43:41

标签: php

使用以下示例($ db是以前创建的数据库连接对象)...

Class Session {
   function write_log () {
     global $db;
     $db->query(...);
   }
}

有没有办法避免每次我想在另一个类中使用$ db对象时编写“global $ db”?换句话说,从一开始就将$ db对象声明为超全局。

2 个答案:

答案 0 :(得分:6)

$db传递给类构造函数:

class Session {
    function __construct($db) {
        $this->db = $db;
    }

    function write_log () {
        $this->db->query(...);
    } 
}

并将其命名为:

$session = new Session($db);

答案 1 :(得分:5)

Superglobals是由PHP提供的一组特定的内置变量,可以在任何地方访问,而无需使用global声明:

$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV

一般情况下,无法创建自己的超全局。

但是,您可以在$db课程中添加Session成员,并转而使用$this->db

class Session
{
   public $db;

   function __construct()
   {
     $this->db = ... // set up $db object
     // ...
   }

   function write_log ()
   {
     $this->db->query(...);
   }
}