詳解php的魔術方法__get()和__set()使用介紹
更新時間:2012年09月19日 17:39:35 作者:
php的魔術方法__get()和__set()使用介紹,需要的朋友可以參考下
先看看php官方文檔的解釋:
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
究竟用中文怎么翻譯呢?
inaccessible :n. 難達到;難接近;無法理解。
有代碼有真相:
<?php
error_reporting(E_ALL);
class stu{
private $a;
private $b = 0;
public $c;
public $d = 0;
//這里的 private 可以用 protected public 替代
private function __get($name) {
return 123;
}
//這里的 private 也可以用 protected public 替代
private function __set($name, $value) {
echo "This is set function";
}
}
$s = new stu();
var_dump($s->a); //output: 123
var_dump($s->b); //output: 123
var_dump($s->c); //output: null
var_dump($s->d); //output: 0
var_dump($s->e); //output: 123
$s->a = 3; //output: This is set function
$s->c = 3; //no output
$s->f = 3; //output: This is set function
?>
結果分析:
如果沒有__get方法,執(zhí)行 var_dump($s->a) var_dump($s->b) 會有致命的錯誤
如果沒有__get方法,執(zhí)行 var_dump($s->e) 會有一個notice,提示沒有定義屬性 $e
總結:
1. 從一個難以訪問的屬性讀取數據的時候 __get() 方法被調用
2. 向一個難以訪問的屬性賦值的時候 __set() 方法被調用
3. 難以訪問包括:(1)私有屬性,(2)沒有初始化的屬性
4. __isset() __unset() 也類似
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
究竟用中文怎么翻譯呢?
inaccessible :n. 難達到;難接近;無法理解。
有代碼有真相:
復制代碼 代碼如下:
<?php
error_reporting(E_ALL);
class stu{
private $a;
private $b = 0;
public $c;
public $d = 0;
//這里的 private 可以用 protected public 替代
private function __get($name) {
return 123;
}
//這里的 private 也可以用 protected public 替代
private function __set($name, $value) {
echo "This is set function";
}
}
$s = new stu();
var_dump($s->a); //output: 123
var_dump($s->b); //output: 123
var_dump($s->c); //output: null
var_dump($s->d); //output: 0
var_dump($s->e); //output: 123
$s->a = 3; //output: This is set function
$s->c = 3; //no output
$s->f = 3; //output: This is set function
?>
結果分析:
如果沒有__get方法,執(zhí)行 var_dump($s->a) var_dump($s->b) 會有致命的錯誤
如果沒有__get方法,執(zhí)行 var_dump($s->e) 會有一個notice,提示沒有定義屬性 $e
總結:
1. 從一個難以訪問的屬性讀取數據的時候 __get() 方法被調用
2. 向一個難以訪問的屬性賦值的時候 __set() 方法被調用
3. 難以訪問包括:(1)私有屬性,(2)沒有初始化的屬性
4. __isset() __unset() 也類似
相關文章
php自定義函數實現(xiàn)二維數組按指定key排序的方法
這篇文章主要介紹了php自定義函數實現(xiàn)二維數組按指定key排序的方法,通過自定義函數實現(xiàn)二維數組按照指定鍵值進行排序的功能,涉及數組的遍歷與判定相關操作技巧,需要的朋友可以參考下2016-09-09
php實現(xiàn)事件監(jiān)聽與觸發(fā)的方法
這篇文章主要介紹了php實現(xiàn)事件監(jiān)聽與觸發(fā)的方法,可實現(xiàn)時間的綁定、觸發(fā)與注銷等功能,具有一定的參考借鑒價值,需要的朋友可以參考下2014-11-11
Thinkphp結合AJAX長輪詢實現(xiàn)PC與APP推送詳解
這篇文章主要給大家介紹了關于Thinkphp結合AJAX長輪詢實現(xiàn)PC與APP推送的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-07-07
[企業(yè)公眾號]升級到[企業(yè)微信]之后發(fā)送消息失敗的解決方法
這篇文章主要介紹了[企業(yè)公眾號]升級到[企業(yè)微信]之后發(fā)送消息失敗的解決方法,涉及微信接口的修改相關操作,需要的朋友可以參考下2017-06-06

