1. Home
  2. /
  3. Web technology
  4. /
  5. PHP
  6. /
  7. OOP
  8. /
  9. [ PHP ] –...

[ PHP ] – OOP 3 類別中的 public private protected final 公開 私有 保護 最終 功能差異

評等結果
點擊便能為這篇文章進行評等!
[評等總次數: 0,平均評等: 0]

再上一篇教學中我們看到 類別生成後竟然可以直接讀寫屬性值,原來是 oop 中的重要角色 public ( 公開 ) private ( 私有 ) protected ( 保護 ) final (最終) 還沒上場。

//原來物件導向有三個很重要的存取設定值(修飾符)
//static 靜態 不用生成類別 就可以直接 存取 這部份也是留著之後再寫範例
//public 公開 生成類別後 不論在 類別的內部 或 外部都可以 寫入讀取屬性的值
//private 私有 生成類別後 只可以在 類別的內部 寫入讀取屬性的值
//protected 保護 生成類別後 只可以在 類別的內部 或是 繼承類別中 寫入讀取屬性的值 這部份留著之後再寫範例
//final 當類別名稱前加上 final 即表示這個類別不允許繼承,如果是在類別中的某個方法 即表示該方法不可重載 但可使用
//以下修改後的範例會把 多餘的註解拿掉
class People {
	private $height;//身高
	private $weight;//體重
	private $sex;//姓別
	//設定身高為
	function set_height($height1) { //未設定 修飾符 預設值為 public
		$this->height = $height1;
	}
	//設定體重為
	function set_weight($weight1) {
		$this->weight = $weight1;
	}
	//設定姓別為
	function set_sex($sex1) {
		$this->sex = $sex1;
	}
	//取得身高值
	function get_height() {
    	return $this->height;
 	}
	//取得身高值
	function get_weight() {
    	return $this->weight;
 	}
	//取得姓別
	function get_sex() {
    	return $this->sex;
 	}
}
$jeff = new People();
$jeff->set_height(170);
$jeff->set_weight(65);
$jeff->set_sex('male');
echo 'jeff 的身高是:';
echo $jeff->get_height();
echo '<br>jeff 的體重是:';
echo $jeff->get_weight();
echo '<br>jeff 的姓別是:';
echo $jeff->get_sex();
$jeff->height=160;//將身高的存取權限變成 private 私有後就沒辦法 直接寫入 讀取 這行以後就會出現錯誤訊息 所以之後的都不會顯示
echo '<br>jeff 的身高是:';
echo $jeff->height;
//不能存取怎麼辦?…那就是透過類別裡面的方法去存取變數值
//顯示結果
/*
jeff 的身高是:170
jeff 的體重是:65
jeff 的姓別是:male
*/
//那如果我有些方法不想給別人修改怎麼辦 屬性跟方法一樣都有 修飾符 的概念
//比如說我不想讓外面的人可以隨意得知我的姓別
	private function get_sex() {
    	return $this->sex;
 	}
echo $jeff->get_sex();//就會出現讀取錯誤 因為 get_sex 方法已被設為私有 只有在類別的內部可以讀取

本篇只會簡單介紹 public / private 兩個差異。

protected 請看這篇:https://www.webteach.tw/?p=3913

評等結果
點擊便能為這篇文章進行評等!
[評等總次數: 0,平均評等: 0]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *