## 訪問控制
對屬性或方法的訪問控制,也即可見性(visibility),是通過關鍵字 public,protected,private 實現的。
* public: 被定義為公有的類成員可以在任何地方被訪問。
* protected: 被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。
* private: 被定義為私有的類成員則只能被其定義所在的類訪問。
### 屬性的訪問控制
類屬性可以定義為 public,protected,private 之一。如果用 var 定義,則被視為公有。
```
<?php
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // 這行能被正常執行
echo $obj->protected; // 這行會產生一個致命錯誤
echo $obj->private; // 這行也會產生一個致命錯誤
$obj->printHello(); // 輸出 Public、Protected 和 Private
class MyClass2 extends MyClass
{
// 可以對 public 和 protected 進行重定義,但 private 而不能
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj2->public; // 這行能被正常執行
echo $obj2->protected; // 這行會產生一個致命錯誤
echo $obj2->private; // 未定義 private
$obj2->printHello(); // 輸出 Public、Protected2 和 Undefined
?>
```
### 方法的訪問控制
類中的方法可以被定義為 public,protected,private 如果沒有設置這些關鍵字,則默認為 public
```
<?php
class MyClass
{
// 聲明一個公有的構造函數
public function __construct(){}
// 聲明一個公有的方法
public function myPublic(){}
// 聲明一個受保護的方法
protected function myProtected(){}
// 聲明一個私有的方法
private function myPrivate(){}
// 此方法默認為公有
function foo()
{
$this->myPublic();
$this->myProtected();
$this->myPrivate();
}
}
$obj = new MyClass;
$obj->myPublic(); // 這行能被正常執行
$obj->myProtected(); // 這行會產生一個致命錯誤
$obj->myPrivate(); // 這行會產生一個致命錯誤
$obj->foo(); // 公有,受保護,私有都可以執行
class MyClass2 extends MyClass
{
// 此方法默認為公有
function foo2()
{
$this->myPublic();
$this->myProtected();
$this->myPrivate(); // 這行會產生一個致命錯誤
}
}
$obj2 = new MyClass2;
$obj2->myPublic(); // 這行能被正常執行
$obj2->foo2(); // 公有的和受保護的都可執行,但私有的不行
?>
```
- 基本語法
- PHP標記
- 指令分隔符
- 從HTML中分離
- 注釋
- 數據類型
- 布爾值
- 整數
- 浮點數
- 字符串
- 數組
- 對象
- 資源
- 空值
- 變量
- 基礎
- 預定義變量
- 變量范圍
- 可變變量
- 常量
- 常量語法
- 魔術常量
- 運算符
- 算術運算符
- 賦值運算符
- 位運算符
- 比較運算符
- 遞增與遞減運算符
- 邏輯運算符
- 字符串運算符
- 數組運算符
- 類型運算符
- 流程控制
- if條件結構
- switch條件結構
- while循環結構
- do-while循環結構
- for循環結構
- foreach循環結構
- 包含文件
- 函數
- 自定義函數
- 可變函數
- 匿名函數
- 遞歸函數
- 類與對象
- 基本概念
- 屬性
- 方法
- 類常量
- 構造函數和析構函數
- 訪問控制
- 繼承
- 抽象類
- 接口
- Trait
- 重載
- 對象遍歷
- 魔術方法
- Final關鍵字
- 命名空間
- 自動加載
- 錯誤處理
- 錯誤顯示
- 錯誤日志
- 錯誤報告
- 自定義錯誤處理
- 異常處理
- 異常處理機制
- 擴展異常處理類
- 字符操作
- 數組操作
- 時間操作
- 表單操作
- GET提交
- POST提交
- 文件上傳
- 會話控制
- COOKIE操作
- SESSION操作
- 文件操作
- 文件屬性
- 讀取文件
- 寫入文件
- 文件管理
- 文件鎖
- 目錄處理
- 路徑處理
- 網絡操作
- HTTP協議
- Socket操作
- CURL操作
- PDO操作
- 介紹
- 連接管理
- 預處理語句
- 事務處理
- 錯誤處理
- 圖像操作
- 正則表達式
- 標準推薦
- 包管理器
- 設計模式
- 常用算法
- 安全防御
- XSS防御
- CSRF防御