亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php5中魔術方法學習筆記

2024-09-04 11:43:40
字體:
來源:轉載
供稿:網友

1.__construct() 當實例化一個對象的時候,這個對象的這個方法首先被調用.

PHP實例代碼如下:

  1. class Test { function __construct() { echo "before"; } } $t = new Test();  
  2. class Test { function __construct() { echo "before"; } } $t = new Test();  
  3. //輸出是:start 

構造器是一個魔術方法,當對象被實例化時它會被調用,在一個類聲明時它常常是第一件做的事但是沒得必要他也像其他任何方法在類中任何地方都可以聲明,構造器也能像其他方法樣繼承,如果我們想到以前繼承例子從介紹到oop,我們能添加構造方法到Animal 類中.

代碼如下:

  1. class Animal{ 
  2.  
  3.   public function __construct() { 
  4.  
  5.     $this->created = time(); 
  6.  
  7.     $this->logfile_handle = fopen('/tmp/log.txt''w'); 
  8.  
  9.   } 
  10.  

現在我們創建一個類來繼承Animal類 - Penguin類,不添加任何屬性和方法在Penguin類中,我們能申明并定義它繼承自Animal類,如:

  1. class Penguin extends Animal { 
  2. $tux = new Penguin; 
  3. echo $tux->created; 

我們知道php5對象模型和類名相同的函數是類的構造函數,那么如果我們同時定義構造函數和__construct()方法的話,php5會默認調用構造函數而不會調用__construct()函數,所以__construct()作為類的默認的構造函數 .

2.__destruct() 當刪除一個對象或對象操作終止的時候,調用該方法.代碼如下:

  1. class Test { function __destruct() { echo "end"; } } $t = new Test();//將會輸出end  
  2. class Test { function __destruct() { echo "end"; } } $t = new Test();//將會輸出end 

我們就可以在對象操作結束的時候進行釋放資源之類的操作

3.__get() 當試圖讀取一個并不存在的屬性的時候被調用.

如果試圖讀取一個對象并不存在的屬性的時候,PHP就會給出錯誤信息,如果在類里添加__get方法,并且我們可以用這個函數實現類似java中反射的各種操作.代碼如下:

  1. class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就會輸出:name 不存在  
  2. class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就會輸出:name 不存在  

例子代碼如下:

  1. class Penguin extends Animal { 
  2.   public function __construct($id) { 
  3.     $this->getPenguinFromDb($id); 
  4.   } 
  5.   public function getPenguinFromDb($id) { 
  6.   } 

4.__set() 當試圖向一個并不存在的屬性寫入值的時候被調用,代碼如下:

  1. class Test { public function __set($key,$value) { echo '對'.$key . "附值".$value; } } $t = new Test(); $t->name = "aninggo"; 就會輸出:對 name 附值 aninggo  
  2. class Test { public function __set($key,$value) { echo '對'.$key . "附值".$value; } } $t = new Test(); $t->name = "aninggo"; 就會輸出:對 name 附值 aninggo 

5.__call() 當試圖調用一個對象并不存在的方法時,調用該方法,代碼如下: 

  1. class Test { public function __call($Key$Args) { echo "您要調用的 {$Key} 方法不存在。你傳入的參數是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning,go);  
  2. class Test { public function __call($Key$Args) { echo "您要調用的 {$Key} 方法不存在。你傳入的參數是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning,go);  
  3. 程序將會輸出:您要調用的 getName 方法不存在。參數是:Array  
  4. (  
  5. [0] => aning  
  6. [1] => go  
  7. )  
  8. 您要調用的 getName 方法不存在。參數是:Array  
  9. (  
  10. [0] => aning  
  11. [1] => go  

6.__toString() 當打印一個對象的時候被調用,這個方法類似于java的toString方法,當我們直接打印對象的時候回調用這個函數,代碼如下:

  1. class Penguin { 
  2.   public function __construct($name) { 
  3.       $this->species = 'Penguin'
  4.       $this->name = $name
  5.   } 
  6.   public function __toString() { 
  7.       return $this->name . " (" . $this->species . ")n"
  8.   } 

在適當的位置,輸出該對象通過調用echo輸出它,如:

$tux = new Penguin('tux');echo $tux;

7.__clone() 

我們看過一個使用clone關鍵字的例子,在我的介紹從入門到oop的第二部分,創建對象的副本,而不是有兩個變量指向同一個實際的數據,在一個類中重寫此方法,我們可以觀察發生了什么當在對象上使用clone關鍵字時,雖然這是不是我們每一天能遇到的,一個漂亮的用例是創建一個真正的單例模式通過添加private訪問修飾符給這個方法,代碼如下:

class Test { public function __clone() { echo "我被復制了!"; } }$t = new Test(); $t1 = clone $t;程序輸出:我被克隆了!

__sleep

__sleep()方法會被調用當對象被序列化后,并允許你處理序列化。這有各種各樣的程序,一個很好的例子如果一個對象包含某種類型的指針,例如文件句柄或引用另一個對象。當對象被序列化然后解序列化,這些引用類型是無用的,因為這些類型的引用的目標可能不再存在或有效。因此,最好是來取消這些信息在存儲它們之前。

__wakeup

__wakeup()是與__sleep()方法相反的,允許您更改對象解序列化的行為,和__sleep()一起使用,可以用來恢復被刪除的句柄和對象當對象被序列化時,一個很好的例子程序是數據庫句柄被取消設置當該項被序列化,然后恢復到當前配置中設置項目時,解序列化一個數據庫句柄.

__autoload()方法可

比如我們將上面的那個Person類所在的文件定義為 Person_class.php,再新建一個php文件 test.php,編輯內容:

  1. function __autoload($calssName
  2. include $className.”_class.php”; //看到這也許你就明白了吧?哈哈 
  3. $p = new Person(“mifan”, 22); 
  4. $p->say();  

這樣執行該test.php頁面就不會出現錯誤了.

php魔術方法一般在什么情況下需要使用?

舉個簡單的例子,當類里面沒有屬性$name;但是你不小心訪問這個屬性,這個時候就會出錯,但是讓你可以設置魔術方法__get($name){ return $name ."不存在"};就會自動調用__get($name);這樣程序就會不因為你訪問了一個不存在的屬性報錯而中斷執行.

補充下 __get($v) 訪問未定義的屬性時調用.

__set($v) ?未定義的屬性賦值時調用.

__isset($v)對未定義的屬性使用isset()函數時調用.

__unset($v)和isset($v)類似.

__call($method)訪問未定義的方法是被調用.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品亚洲94久久精品| 中文字幕精品久久久久| 欧美综合在线第二页| 精品国产网站地址| 92版电视剧仙鹤神针在线观看| 欧美另类老肥妇| 中文字幕亚洲一区| 精品欧美国产一区二区三区| 色偷偷噜噜噜亚洲男人的天堂| 国产精品黄色av| 中文字幕亚洲色图| 欧美人与物videos| 国产精品高潮粉嫩av| 久久视频国产精品免费视频在线| 夜夜嗨av一区二区三区免费区| 亚洲精品久久久久久久久久久久| 精品久久久久久电影| 欧美激情精品久久久久久变态| 欧美日韩国产精品一区二区不卡中文| 欧美巨乳美女视频| 亚洲免费成人av电影| 日韩中文字幕亚洲| 国内精品美女av在线播放| 中文字幕免费精品一区高清| 97精品视频在线观看| 日韩在线播放视频| 国产精品嫩草影院久久久| 欧美国产日韩一区二区在线观看| 欧美性受xxxx白人性爽| 宅男66日本亚洲欧美视频| 久久成人在线视频| 欧美亚州一区二区三区| 91精品国产成人| 九色成人免费视频| 亚洲国产欧美在线成人app| 亚洲精品永久免费| 久久综合国产精品台湾中文娱乐网| 欧美一级淫片aaaaaaa视频| 日韩中文字幕在线精品| 中文字幕在线成人| 欧美日韩国产成人高清视频| 亚洲精品成人免费| 欧美日韩亚洲精品内裤| 91精品国产综合久久男男| 成人激情在线播放| 久久男人资源视频| 国产v综合v亚洲欧美久久| 午夜精品美女自拍福到在线| 国产成人精品久久| 国产精品揄拍一区二区| 亚洲欧美日韩一区二区在线| 亚洲女人天堂网| 亚洲xxxx做受欧美| 国产精品一区二区三区久久| 久久久久久久国产| 久久久国产精彩视频美女艺术照福利| 毛片精品免费在线观看| 久热在线中文字幕色999舞| 亚洲精品免费网站| 久久精品国产清自在天天线| 日韩在线视频免费观看| 国产精品视频在线播放| 日本精品一区二区三区在线| 日韩av网址在线| 欧美亚洲国产视频小说| 97在线视频免费看| 欧美一级电影免费在线观看| 久久夜精品香蕉| 国产精品高潮呻吟视频| 在线日韩第一页| 久久综合伊人77777尤物| 精品日本美女福利在线观看| 久久男人资源视频| 久久亚洲电影天堂| 精品日韩视频在线观看| 91精品在线看| 日本精品视频在线播放| 久久久人成影片一区二区三区| 中文国产成人精品久久一| 成人中文字幕在线观看| 成人在线精品视频| 欧美电影在线观看| 久久精品最新地址| 欧美另类暴力丝袜| 91精品国产777在线观看| 欧美夫妻性生活xx| 国产日韩欧美中文在线播放| 亚洲欧美在线一区| 亚洲精品电影网在线观看| 亚洲另类xxxx| 日韩精品在线私人| 国产精品天天狠天天看| 欧美激情综合色| 91久久精品日日躁夜夜躁国产| 97精品伊人久久久大香线蕉| 2025国产精品视频| 久久精品国产亚洲精品2020| 国产亚洲视频在线| 亚洲乱码av中文一区二区| 中文字幕亚洲国产| 国产精品爽黄69| 日韩精品极品视频免费观看| 国内外成人免费激情在线视频| 欧美日韩成人网| 成人xvideos免费视频| 国产又爽又黄的激情精品视频| 久久久久国产一区二区三区| 91美女片黄在线观看游戏| 狠狠久久亚洲欧美专区| 国产综合久久久久久| 国产最新精品视频| 国产成人精品国内自产拍免费看| 国内揄拍国内精品少妇国语| 夜色77av精品影院| 91嫩草在线视频| 国产成人精品最新| 国产成人精品电影久久久| 色综合视频网站| 国产视频亚洲精品| 久久人人97超碰精品888| 亚洲国产精品99| 欧美综合在线观看| 欧美黑人巨大精品一区二区| 欧美一二三视频| 久久精品亚洲94久久精品| 国产精品极品尤物在线观看| 这里精品视频免费| 国产日产久久高清欧美一区| 精品亚洲一区二区三区四区五区| 日本精品va在线观看| 欧美一级成年大片在线观看| 91超碰caoporn97人人| 国产精品热视频| 日韩av中文在线| 最近免费中文字幕视频2019| 欧美理论电影网| 亚洲最大福利网| 国产精品欧美激情在线播放| 久久久国产视频91| 91精品啪在线观看麻豆免费| 午夜精品久久久久久久久久久久| 亚洲欧美日韩国产成人| 亚洲男人天堂九九视频| 国产精品国产三级国产aⅴ9色| 精品国产自在精品国产浪潮| 亚洲黄色成人网| 亚洲free性xxxx护士白浆| 国产精品igao视频| 亚洲午夜未满十八勿入免费观看全集| 亚洲国产婷婷香蕉久久久久久| 亚洲日本成人女熟在线观看| 国产成人精品日本亚洲| 这里只有精品久久| 欧美精品久久久久| 国产97人人超碰caoprom| 亚洲成人a级网| 91在线高清免费观看| 一本色道久久综合狠狠躁篇的优点| 亚洲最大的免费| 亚洲视频在线播放| 日本久久久久久久| 欧美高清激情视频| 亚洲综合中文字幕68页| 在线观看国产精品淫|