1. 程式人生 > >php中類成員的訪問限制與封裝技術

php中類成員的訪問限制與封裝技術

/**
 * 封裝的概念
 * 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>';   //使用公共介面訪問私有成員