麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

php析構函數的簡單使用說明

2024-05-04 22:35:10
字體:
來源:轉載
供稿:網友

  隨著面向對象編程的普遍展開,面向對象展現了其中很多有趣的問題。相信很多初學者學習php面向對象時會接觸兩個函數,構造函數與析構函數。構造函數似乎用的更多,析構函數用的較少(相對初學者有限編程經驗而言,筆者也是如此。)在功能上,構造函數在創建對象時調用,析構函數在對象銷毀時調用,都無需特意去調用,一頭一尾,倒也是前后照應。

  析構函數常常處理的事務是一些資源釋放的工作,比如前面有fopen(),這里調用fclose(),前面有imagecreatefromjepg(),這里調用imagedestory(),這些都是些常見的例子,當然不局限于此。我們大可將其當做一個普通的會在對象銷毀或者腳本執行完畢的時候執行的函數。

  啰嗦那么多,還是盡早提出今天的主要的問題:

<?phpclass Test{ public function __destruct(){  echo "執行析構函數"; } }$test1=new Test;$test2=$test3=$test1;unset($test1);echo "<hr/>";

  這段腳本執行結果是什么?

  在回答這個問題之前,回看我上面標示的幾個字。我們可以理所應當的認為在輸出分隔線前 unset($test1) ,這樣會調用析構函數,輸出文字,至于 $test2,$test3 應該會在腳本執行完畢調用析構函數。也就是說,在分割線上面,會輸出一段文字,分隔線下面會輸出兩段文字。 在這個時候,大可以小驕傲一下,畢竟自己懂得什么時候調用析構函數。但現實真是如此么?我們可以看一下執行結果。

  嘿,他喵的,怎么就輸出了一句啊???

  其實我們忽略了一個重要的前提條件,就是對象的賦值默認的是引用賦值。這一點很多人沒有注意到,希望初學者能多多注意一下。

  那么既然是引用賦值,結合我們對普通變量的理解,我們很快想到,三個變量名指向同一塊存儲地址。那么既然如此的話, unset($test1) 起到的是什么作用???破壞變量指向存儲地址還是破壞存儲地址存儲的內容?

  了解unset()函數用法的請直覺跳過本段。

  想著這蛋疼的問題,莫不如去查看手冊。

  同樣是傳遞引用,毀掉的僅僅是變量名指向存儲地址。結合平常unset()的作用,我們可以這么描述,當多個變量名或者對象名指向一塊存儲地址時,unset()函數的作用僅僅是銷毀變量名和存儲地址的指向而已,當僅有一個變量名或者對象名,unset銷毀的是指定的存儲地址上的內容。

  我們可以想象真實的存儲內容是一臺電視。多個人(多個變量名或對象名)在看一臺電視。unset()后,一個人不看了,離開了,電視還開著。當只有一個人看電視的時候,unset()后,人離開的時候,要把電視關了 ,也就是釋放占用的存儲空間。對這部分內容感興趣的話也可以看一下《php 遞歸函數的三種實現方式》。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 素人视频在线观看免费 | chengrenyingshi | 欧美亚洲免费 | 国产精品视频在 | 伦一区二区三区中文字幕v亚洲 | 中文字幕 欧美 日韩 | 黄色片在线播放 | 叉逼视频 | 国产精品视频yy9299一区 | 91伊人久久 | 久久久久久久午夜 | av电影在线观看网址 | 久久精品1区2区 | 爱操影院| 欧美囗交 | xxxx18韩国护士hd老师 | 久久久久亚洲美女啪啪 | 免费a级作爱片免费观看欧洲 | 欧美精品久久久久久久久久 | aaaaaaa毛片 | 美国av片在线观看 | 成人做爰s片免费看网站 | 依依成人综合 | 91成人免费看片 | 欧美精品第1页 | 久久久久久久久久久av | 日本免费a∨ | 国产精品一区二区三区99 | 欧美日韩一区,二区,三区,久久精品 | 91不雅视频 | 爱高潮www亚洲精品 国产精品一区自拍 | 中文字幕 亚洲一区 | 日本精品中文字幕 | 亚洲视色| 在线观看免费污视频 | 一级做人爱c黑人影片 | 91 久久| 国产精品免费久久久久 | 午夜视频色 | 国产一国产一级毛片视频在线 | 看免费黄色大片 |