将一个可爱的对象用于另一个对象而不使其成为全局?

时间:2011-07-18 23:11:14

标签: php class object global-variables

我的朋友告诉我:Jesus, man! Don't use GLOBALs. It makes your software slow.

这是我的方式:

// Database class
class DB extends mysqli { ... }

// create Database object
$db = new DB(...)

// My class
class A {
  function foo(){
    global $db; ## PROBLEM IS HERE

    $db->get_all(...);
  }
}

有没有办法使用$db对象而不使其成为全球?还是我应该停下来听听我的朋友?

1 个答案:

答案 0 :(得分:1)

不确定。只需为$db对象创建一个属性,并通过构造函数将其传递给对象A(或创建一个setter方法):

class A
{
    protected $db;

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

    function foo()
    {
        $this->db->get_all(...);
    }
}

// create your objects. inject the DB object into object A
$db = new DB();
$a = new A($db);

这是你的意思吗?