PHP类中的__get()和__set函数到底有什么用
PHP類中的__get()和__set函數(shù)到底有什么用
一、總結(jié)
一句話總結(jié):當(dāng)試圖獲取一個(gè)不可達(dá)變量時(shí),類會(huì)自動(dòng)調(diào)用__get。同樣的,當(dāng)試圖設(shè)置一個(gè)不可達(dá)變量時(shí),類會(huì)自動(dòng)調(diào)用__set。在網(wǎng)站中,這兩個(gè)并不是什么非用不可的函數(shù)。所以可以用于輸出提示消息,或者返回值。
?
1、php中使用什么代替java面相對(duì)象中的常用的get和set方法?
類默認(rèn)自帶的__get()和__set()
?
2、php中類中默認(rèn)自帶的__get()方法什么時(shí)候被調(diào)用?
當(dāng)試圖獲取一個(gè)不可達(dá)變量時(shí),類會(huì)自動(dòng)調(diào)用__get
所以在php中相當(dāng)于可以直接用對(duì)象訪問私有屬性(因?yàn)闀?huì)自動(dòng)調(diào)用__get()方法)
?
3、php中如何調(diào)用類的私有屬性?
a、new對(duì)象($modelTime =new ModelTime();)
b、用new出來的對(duì)象直接調(diào)用屬性(echo $modelTime->perDayTS;die;)
c、在類中要寫__get()方法返回值
10 public function __get($my_var){ 11 return $this->$my_var; 12 }?
?
二、PHP類中的__get()和__set函數(shù)到底有什么用?
當(dāng)試圖獲取一個(gè)不可達(dá)變量時(shí),類會(huì)自動(dòng)調(diào)用__get。
同樣的,當(dāng)試圖設(shè)置一個(gè)不可達(dá)變量時(shí),類會(huì)自動(dòng)調(diào)用__set。 在網(wǎng)站中,這兩個(gè)并不是什么非用不可的函數(shù)。 例如: Class Test { ? ? private $a = 1; ? ? private $b = 2; ? ? public ?$c = 3; ? ? ? public?function ?__get($vname) ? ? { ? ? ? ? return "you can not get"; ? ? } ? ? ? public function __set($vname,$value) ? ? { ? ? ? ? echo ?"you can not set"; ? ? } } ? $t = new Test; echo $t->a;//這里試圖要打印出私有變量 $t->b=3;//這里試圖要把私有變量進(jìn)行設(shè)置 想要直接對(duì)私有變量操作,當(dāng)然是做不到的。 于是在讀取的時(shí)候,調(diào)用__get(),輸出“you can not get”; 在設(shè)置的時(shí)候,調(diào)用__set(),輸出“you can not set”。 順便提一下,__get()和__set()函數(shù)要設(shè)置為public,要不然會(huì)Warning。 __get()和__set()函數(shù)定義時(shí)的參數(shù)分別為1個(gè)和2個(gè),不管函數(shù)中到底有沒用,都是不可省略的。 通過修改__get()和__set()函數(shù)內(nèi)部的語句,就可以實(shí)現(xiàn)在外部調(diào)用類的私有變量。 例如: private __get($vname) { ? ? return $this->$vname; } 如果$vname的值是a,那么就返回了正確的值。 __set()也同理。public function?__set($vname,$value)
{
? ? $this->$vname?=?$value;
}
?
參考:
PHP類中的__get()和__set函數(shù)到底有什么用? - East2_100 - 博客園
https://www.cnblogs.com/east2-100/p/5272699.html
三、php中使用類默認(rèn)自帶的__get()和__set()代替java中的常用的get和set方法
關(guān)鍵代碼
1 class Time extends Common 2 { 3 private $perDayTS; 4 public function __construct() { 5 parent::__construct(); 6 $this->perDayTS=24*60*60; 7 echo "正在調(diào)用構(gòu)造函數(shù)".$this->perDayTS; 8 } 9 10 public function __get($my_var){ 11 return $this->$my_var; 12 }調(diào)用
1 public function test1(){ 2 $modelTime =new ModelTime(); 3 echo $modelTime->perDayTS;die; 4 }?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Renyi-Fan/p/9487387.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的PHP类中的__get()和__set函数到底有什么用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一问就想不起来的问题,来看看?
- 下一篇: 2018 ACM 国际大学生程序设计竞赛