php中類成員的訪問限制與封裝技術
阿新 • • 發佈:2018-12-02
/**
* 封裝的概念
* 1. 類屬性,除非必要,否則都應該宣告為私有或受保護的,遮蔽外部直接訪問
* 2. 為類成員屬性提供訪問訪問介面,在介面方法中對外部訪問進行過濾,保護資料
*/
class Staff{ //public: 公開,在類的內部,外部都可以訪問 public $name; //protected: 受保護,僅在類的內部,以及子類中的訪問 protected $dept; //private: 私有,僅在本類內部訪問,外部以及子類均不能訪問 private $salary; //構造方法 public function __construct($name,$dept,$salary) { $this->name = $name; $this->dept = $dept; $this->salary = $salary; } //對於外部禁止訪問的成員,可以提供一個介面(方法) public function getDept() { // 一個方法或函式有一個以上的return語句是一個不好的程式設計風格 // if ($this->name == 'peter') { // return '該員工在保密部門工作!' // } // return $this->dept; $res = $this->dept; if($this->name == 'Donnie') { $res = '該員工在保密部門工作,不可查'; } return $res; //protected 在類內部可以訪問 } //私有成員訪問介面 public function getSalary() { $res = $this->salary; if($this->dept == '財務部') { $res = '財務部的人你都敢查?不想混了?'; } return $res; } } $staff = new Staff('Donnie','財務部',8000); echo '姓名:'.$staff->name.'<br>'; //echo '部門:'.$staff->dept.'<br>'; //類外不能訪問受保護成員 echo '部門:'.$staff->getDept().'<br>'; echo '<hr>'; $staffs = new Staff('小龍女','財務部',10000); echo '姓名:'.$staffs->name.'<br>'; echo '部門:'.$staffs->getDept().'<br>'; //使用公共介面訪問受限成員 echo '工資:'.$staffs->getSalary().'<br>'; //使用公共介面訪問私有成員