用于访问子类的子类

时间:2013-12-05 17:47:05

标签: php

我有一个类调用其他类的aload;

require_once('class.database.php');
require_once('class.users.php');

Class Bootstrap {

     public $db;
     public $users;

     public function __construct() { $this->db = new Database(); $this->users = new Users(); }
}

$est = new Bootstrap();

并且该类工作正常,但是我可以在我的数据库类中说;

 class Database {
     public function __construct() { }

     public function foo() {
         echo 'hi';
     }
 }

然后从用户类,我想引用该函数,但我想保持代码干净,因此想要避开静态。

我尝试过引用它,例如:

 * $est->db->foo();
 * $db->foo();

但是没有一个可以工作,有人可以告诉我正确的方式来调用它。谢谢!

2 个答案:

答案 0 :(得分:2)

目前,您已经无法从<{em> Bootstrap类中的访问Users内的特定数据库实例。

你可以:

  1. 实例化时将数据库实例交给用户:

    $this->users = new Users($this->db);

  2. 实例化时,将Users类引用到Bootstrap:

    $this->users = new Users($this);

  3. 让用户类设置自己的数据库连接:

    class Users { public function __construct() { $this->db = new Database(); } }

  4. 设置静态

答案 1 :(得分:0)

您可以为您的类提供引导程序的引用并以这种方式获取它们或使您的引导程序成为单例:

require_once('class.database.php');
require_once('class.users.php');

Class Bootstrap {

     public $db;
     public $users;

     public function __construct() { $this->db = new Database($this); $this->users = new Users($this); }
}

$est = new Bootstrap();

在课堂上

 class User {
     private $bs;
     public function __construct($bs) { $this->bs = $bs}

     public function foo() {
         $this->bs->db->foo();
     }
 }

或Bootrap作为单身人士:

require_once('class.database.php');
require_once('class.users.php');

Class Bootstrap {
     private static $instance=null;
     public $db;
     public $users;

     private function __construct() { $this->db = new Database($this); $this->users = new Users($this); }

     public static function getInstance(){
          if(!self::$instance){
              self::$instance = new self();
          }
          return self::$instance;
     }
}

$est = Bootstrap::getInstance();

在用户中:

class User {
     public function __construct() { }

     public function foo() {
         $db = Bootstrap::getInstance()->db;
         $db->foo();
     }
 }