PHP OOP:如何避免exended类继承类实例变量?

时间:2014-10-31 04:09:13

标签: php class extends instances

我正在将现有的网站从程序化PHP代码转换为OOP。我想设置一个Permissions类,其中包含与多个扩展类(即数据库,登录,验证等)相关的信息,例如$ USER数据。

我是否能够通过魔术方法__construct()在父类(即权限)中为子类(即数据库,登录,验证)设置类实例变量,并让它们出现在除了类之外的每个子类中参考

即。 '类数据库扩展权限'不包括Permissions :: $ db,否则会出现循环和错误。

示例代码段如下所示:

<?php
class Permissions {
  protected $db = '';
  protected $login = '';
  protected $val = '';

  protected $USER = array (); // i.e. $this->USER['id'], $this->USER['access-level']

  public function __construct() {
    $this->db = new Database();
    $this->login = new Login();
    $this->val = new Validation();

  // Code to populate $this->USER
  }
}

class Database extends Permissions {
  // Code
}

class Login extends Permissions {
  // Code
}

class Validation extends Permissions {
  // Code
}
?>

每个子类只调用它需要访问的类是否更好?即。

<?php
class Permissions {

  protected $USER = array (); // i.e. $this->USER['id'], $this->USER['access-level']

  public function __construct() {
  // Code to populate $this->USER
  }
}

class Database extends Permissions {
  // Code
}

class Login extends Permissions {

  private $db = '';

  public function __construct() {
    $db = new Database();
  }

  // Code
}

class Validation extends Permissions {

  public function __construct() {
    $db = new Database();
  }

  // Code
}
?>

0 个答案:

没有答案