### __get()
獲得不可訪問的屬性的值: __get()
一旦定義了__get()魔術方法,獲取不可訪問的屬性的值的時候,就會自動的執行該方法,此時,處理權就交給用戶自己了!
該魔術方法,只需要一個參數,就是該屬性的屬性名!
### 默認行為
~~~
class Person{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
$p = new Person("jack",20);
var_dump($p->height);
~~~
~~~
Notice: Undefined property: Person::$height //報錯
~~~
### 不完成方法體
~~~
class Person{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function __get($name) //自動調用__get() ,但是該方法什么都沒做
{
}
}
$p = new Person("jack",20);
var_dump($p->height);
~~~
~~~
NULL
~~~
### 完成方法體
~~~
class Person{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function __get($name)
{
if(!isset($this->$name)){
return "屬性不存在";
}
}
}
$p = new Person("jack", 20);
var_dump($p->height);
~~~
~~~
string(15) "屬性不存在"
~~~
或者
~~~
class Person{
private $name;
private $age;
private $money;
public function __construct($name)
{
$this->name = $name;
}
public function setName($name)
{
$this->name = $name;
}
public function __get($name)
{
$allow_get = ['name', 'age'];
if(in_array($name, $allow_get)){
return $this->$name;
}
return "無權訪問";
}
}
$p1 = new Person("jack");
var_dump($p1->money);
~~~
~~~
string(12) "無權訪問"
~~~
### 注意
__get和__set兩個方法往往在真實的項目中都是成對出現的!而且,往往就是利用這兩個方法批量的對對象的私有屬性進行處理!
- PHP加密技術
- md5加密
- Crypt加密
- 函數
- 概述
- 強類型參數
- 可變參數列表
- 值傳遞&引用傳遞
- 變量作用域
- 可變函數
- 嵌套函數
- 遞歸函數
- 匿名函數(閉包)
- 面向對象
- 概念
- 類
- 對象的傳值
- 對象的克隆
- 構造方法
- 析構方法
- 克隆方法
- $this
- 類常量
- 靜態屬性
- 靜態方法
- 繼承
- 重寫
- 重載
- 概述
- 屬性重載
- 概述
- __set()
- __get()
- __unset()
- __isset()
- 方法重載
- 概述
- __call()
- __callstatic()
- 封裝
- 最終類
- 抽象類
- 接口
- 對象的序列化與反序列化
- __sleep()
- __wakeup()
- 其他魔術方法
- 對象的遍歷
- 類和對象相關函數
- 錯誤
- 概述
- 設置錯誤級別
- trigger_error()觸發錯誤
- 處理PHP中的錯誤
- 異常
- 概述
- 自定義異常類
- 自定義文件寫入異常類
- 記錄和發送異常信息
- 使用觀察者模式處理異常信息
- 自定義異常處理器
- 設計模式
- 創建型
- 單例模式
- 工廠模式
- 原型模式
- 結構型
- 注冊樹模式
- 適配器模式
- 數據映射模式
- 裝飾器模式
- 代理模式
- 行為型
- 策略模式
- 觀察者模式
- 迭代器模式
- 網絡
- cURL
- Oauth2.0
- QQ第三方登錄
- TCP/IP協議
- 概述
- HTTP協議
- 概述
- HTTP請求協議
- HTTP響應協議
- WebSocket
- 安裝擴展
- Redis
- Socket
- 計算機通信
- socket簡介
- PHP操作socket
- TCP
- HTTP服務端
- WebSocket
- PHP7
- 生成器yield
- 異常finally
- CGI和FPM
- php有用命令
- 內存