標籤:info this prot png string inf 成員方法 技術 其他
封裝:
封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者對象操作,對不可信的進行資訊隱藏。
上面的操作是靠以下存取控制符號來實現,規定了自身許可權,使有的人能訪問,有的人不能訪問
常式:
[php] view plain copy
- <span style="font-size:18px;"><?php
- class Person{
- public $name;
- private $age;
- private $salary;
- function __construct($name,$age,$salary){
- $this->name=$name;
- $this->age=$age;
- $this->salary=$salary;
- }
- }
- $a1=new Person("小明",32,5000);
- //正確顯示,全域屬性訪問沒有限制
- echo "<br>".$a1->name."<br>";
- //報錯,私人屬性不能在類外訪問
- //echo "<br>".$a1->age."<br>";
- //報錯,私人屬性不能在類外訪問
- //echo "<br>".$a1->salary."<br>";
- ?></span>
php提供了三種存取控制符號來控制方法和屬性(變數)的存取權限.
1. public 表示全域,可以在本類,類外部,子類 中使用
2. protected 表示受到保護, 可以在本類, 子類中使用,不能在類外使用n
3. private 表示私人, 只能在本類中使用,不能在類外使用,即在其他地方new了本類,也不能調用該方法
這三個控制修飾符號可以對 屬性 和 方法進行修飾
1. 如果一個方法沒有存取修飾詞,則預設是public
2. 屬性 必須指定存取修飾詞,若沒有存取修飾詞,會報錯。
3. 私人方法前面最好加底線,如:private function _save(){}
//方法之間可以互相調用. 但是需要使用 $this引用
function test11()
{
$this->test12();
}
protected function test12()
{
echo "test12 hello";
}
舉例說明:
[php] view plain copy
- <?php
- class Person1{
- public $name;
- protected $age;
- private $salary;
-
-
- function __construct($name,$age,$salary){
- $this->name=$name;
- $this->age=$age;
- $this->salary=$salary;
- }
-
-
- //成員方法
- public function showInfo(){
- //這裡說明在本類中可以使用 public protected 和private 修飾的變數.
- echo $this->name."||".$this->age."||".$this->salary;
- }
- function test(){
- //調用showInfo()方法,利用this引用
- $this->showInfo();
- }
- }
- //建立一個人
- $p1=new Person1("孫悟空",30,1000);
- $p1->test();
- ?>
若想在類外去訪問protected 變數或者 private 變數, 通常的做法是在類中建立 public 方法去訪問 這些變數. 形式是
public function setXxx($val){
}
public function getXxx(){
}
public function showInfo(){
}
舉例說明:
[php] view plain copy
- <?php
- class Person2{
- public $name;
- protected $age;
- private $salary;
-
- function __construct($name,$age,$salary){
- $this->name=$name;
- $this->age=$age;
- $this->salary=$salary;
- }
-
- //成員方法
- public function showInfo(){
- //這裡說明在本類中可以使用 public protected 和private 修飾的變數.
- echo "<br>".$this->name."||".$this->age."||".$this->salary;
- }
- }
- //建立一個人
- $p1=new Person2("豬八戒",20,5000);
- //訪問其詳細資料,由於屬性age和salary分別為保護和私人變數,若在類外直接存取
- //其屬性會報錯,但在類中建立一個公用屬性的函數,通過函數即可訪問這些變數。
- $p1->showInfo();
- ?>
PHP物件導向 – 封裝