欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php析構(gòu)函數(shù)的簡(jiǎn)單使用說(shuō)明

 更新時(shí)間:2015年08月24日 08:56:20   投稿:hebedich  
與構(gòu)造函數(shù)相反,在PHP5中,可以定義一個(gè)名為_(kāi)_destruct()的函數(shù),稱之為PHP5析構(gòu)函數(shù),PHP將在對(duì)象在內(nèi)存中被銷毀前調(diào)用析構(gòu)函數(shù),使對(duì)象在徹底消失之前完成一些工作。對(duì)象在銷毀一般可以通過(guò)賦值為null實(shí)現(xiàn)。

  隨著面向?qū)ο缶幊痰钠毡檎归_(kāi),面向?qū)ο笳宫F(xiàn)了其中很多有趣的問(wèn)題。相信很多初學(xué)者學(xué)習(xí)php面向?qū)ο髸r(shí)會(huì)接觸兩個(gè)函數(shù),構(gòu)造函數(shù)與析構(gòu)函數(shù)。構(gòu)造函數(shù)似乎用的更多,析構(gòu)函數(shù)用的較少(相對(duì)初學(xué)者有限編程經(jīng)驗(yàn)而言,筆者也是如此。)在功能上,構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)調(diào)用,析構(gòu)函數(shù)在對(duì)象銷毀時(shí)調(diào)用,都無(wú)需特意去調(diào)用,一頭一尾,倒也是前后照應(yīng)。

  析構(gòu)函數(shù)常常處理的事務(wù)是一些資源釋放的工作,比如前面有fopen(),這里調(diào)用fclose(),前面有imagecreatefromjepg(),這里調(diào)用imagedestory(),這些都是些常見(jiàn)的例子,當(dāng)然不局限于此。我們大可將其當(dāng)做一個(gè)普通的會(huì)在對(duì)象銷毀或者腳本執(zhí)行完畢的時(shí)候執(zhí)行的函數(shù)。

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

<?php
class Test{
 public function __destruct(){
  echo "執(zhí)行析構(gòu)函數(shù)";
 }
 }
$test1=new Test;
$test2=$test3=$test1;
unset($test1);
echo "<hr/>";

  這段腳本執(zhí)行結(jié)果是什么?

  在回答這個(gè)問(wèn)題之前,回看我上面標(biāo)示的幾個(gè)字。我們可以理所應(yīng)當(dāng)?shù)恼J(rèn)為在輸出分隔線前 unset($test1) ,這樣會(huì)調(diào)用析構(gòu)函數(shù),輸出文字,至于 $test2,$test3 應(yīng)該會(huì)在腳本執(zhí)行完畢調(diào)用析構(gòu)函數(shù)。也就是說(shuō),在分割線上面,會(huì)輸出一段文字,分隔線下面會(huì)輸出兩段文字。 在這個(gè)時(shí)候,大可以小驕傲一下,畢竟自己懂得什么時(shí)候調(diào)用析構(gòu)函數(shù)。但現(xiàn)實(shí)真是如此么?我們可以看一下執(zhí)行結(jié)果。

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

  其實(shí)我們忽略了一個(gè)重要的前提條件,就是對(duì)象的賦值默認(rèn)的是引用賦值。這一點(diǎn)很多人沒(méi)有注意到,希望初學(xué)者能多多注意一下。

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

  了解unset()函數(shù)用法的請(qǐng)直覺(jué)跳過(guò)本段。

  想著這蛋疼的問(wèn)題,莫不如去查看手冊(cè)。

  同樣是傳遞引用,毀掉的僅僅是變量名指向存儲(chǔ)地址。結(jié)合平常unset()的作用,我們可以這么描述,當(dāng)多個(gè)變量名或者對(duì)象名指向一塊存儲(chǔ)地址時(shí),unset()函數(shù)的作用僅僅是銷毀變量名和存儲(chǔ)地址的指向而已,當(dāng)僅有一個(gè)變量名或者對(duì)象名,unset銷毀的是指定的存儲(chǔ)地址上的內(nèi)容。

  我們可以想象真實(shí)的存儲(chǔ)內(nèi)容是一臺(tái)電視。多個(gè)人(多個(gè)變量名或?qū)ο竺┰诳匆慌_(tái)電視。unset()后,一個(gè)人不看了,離開(kāi)了,電視還開(kāi)著。當(dāng)只有一個(gè)人看電視的時(shí)候,unset()后,人離開(kāi)的時(shí)候,要把電視關(guān)了 ,也就是釋放占用的存儲(chǔ)空間。對(duì)這部分內(nèi)容感興趣的話也可以看一下《php 遞歸函數(shù)的三種實(shí)現(xiàn)方式》。

  好的,回歸主題。 unset($test1) 后, 原來(lái)的對(duì)象還在。當(dāng)輸出分割線后,腳本執(zhí)行完畢,調(diào)用析構(gòu)函數(shù)。 因?yàn)閷?duì)象只有一個(gè),調(diào)用析構(gòu)函數(shù)也只調(diào)用一次。輸出如上結(jié)果也就理所應(yīng)當(dāng)。

  其他幾個(gè)相關(guān)的有意思的問(wèn)題:在程序中調(diào)用析構(gòu)函數(shù)的方法還有很多。無(wú)論是設(shè)置對(duì)象為null,還是false,其余的對(duì)象依舊不受影響。這和普通變量還是有區(qū)別的。(unset()函數(shù)的效果是一樣的)。有興趣的話可以試試。

  另外說(shuō)一個(gè)比較囧的事情:我們都知道構(gòu)造函數(shù)可以使用__construct(),卻忽視了同名構(gòu)造函數(shù)。所以,大家還是留心一下。

最后我們來(lái)看個(gè)例子

<?php 
/* 
 * Created on 2009-11-18 
 * 
 * To change the template for this generated file go to 
 * Window - Preferences - PHPeclipse - PHP - Code Templates 
 */ 
 class student{ 
 //屬性 
 private $no; 
 private $name; 
 private $gender; 
 private $age; 
 
 private static $count=0; 
 function __construct($pname) 
 { 
 $this->name = $pname; 
 self::$count++; 
 } 
 
 function __destruct() 
 { 
 self::$count--; 
 } 
 
 static function get_count() 
 { 
 return self::$count; 
 } 
 } 
 
 $s1=new student("Tom"); 
 print(student::get_count()); 
 
 $s2=new student("jerry"); 
 print(student::get_count()); 
 
 $s1=NULL; 
 print(student::get_count()); 
 
 $s2=NULL; 
 print(student::get_count()); 
?> 

上面這段代碼就是PHP5析構(gòu)函數(shù)的具體使用方法,希望對(duì)大家有所幫助。

相關(guān)文章

  • PHP使用preg_split和explode分割textarea存放內(nèi)容的方法分析

    PHP使用preg_split和explode分割textarea存放內(nèi)容的方法分析

    這篇文章主要介紹了PHP使用preg_split和explode分割textarea存放內(nèi)容的方法,結(jié)合實(shí)例形式分析preg_split和explode函數(shù)的功能、使用技巧與文本字符串分割過(guò)程中的相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • php5.3提示Function ereg() is deprecated Error問(wèn)題解決方法

    php5.3提示Function ereg() is deprecated Error問(wèn)題解決方法

    這篇文章主要介紹了php5.3提示Function ereg() is deprecated Error問(wèn)題解決方法,主要是由于php5.3對(duì)ereg()函數(shù)升級(jí)造成的,使用時(shí)只要對(duì)其規(guī)則和函數(shù)進(jìn)行簡(jiǎn)單的修改即可,需要的朋友可以參考下
    2014-11-11
  • php中in_array函數(shù)用法分析

    php中in_array函數(shù)用法分析

    這篇文章主要介紹了php中in_array函數(shù)用法,以實(shí)例形式分析了PHP中in_array函數(shù)用法及相關(guān)的注意事項(xiàng),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • PHP whois查詢類定義與用法示例

    PHP whois查詢類定義與用法示例

    這篇文章主要介紹了PHP whois查詢類定義與用法,結(jié)合實(shí)例形式分析了php定義及使用whois查詢類進(jìn)行網(wǎng)站whois查詢的相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • ajax php 實(shí)現(xiàn)寫入數(shù)據(jù)庫(kù)

    ajax php 實(shí)現(xiàn)寫入數(shù)據(jù)庫(kù)

    看到同學(xué)背詞用的生詞本,覺(jué)得很不錯(cuò).正好自己也在看書,為了有一個(gè)好的效果,于是想做一個(gè)類似生詞本的,可以存知識(shí)點(diǎn),和查看知識(shí)點(diǎn)的.
    2009-09-09
  • 詳解PHP的引用計(jì)數(shù)

    詳解PHP的引用計(jì)數(shù)

    這篇文章主要介紹了PHP的引用計(jì)數(shù)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用PHP,感興趣的朋友可以了解下
    2021-04-04
  • php表單轉(zhuǎn)換textarea換行符的方法

    php表單轉(zhuǎn)換textarea換行符的方法

    今天在項(xiàng)目中遇到一個(gè)textarea換行的問(wèn)題,調(diào)試了半天都沒(méi)有解決。要將textarea里的回車換行轉(zhuǎn)換成br存入數(shù)據(jù)庫(kù)。
    2010-09-09
  • php中的實(shí)現(xiàn)trim函數(shù)代碼

    php中的實(shí)現(xiàn)trim函數(shù)代碼

    trim() 函數(shù)從字符串的兩端刪除空白字符和其他預(yù)定義字符。
    2007-03-03
  • PHP觀察者模式示例【Laravel框架中有用到】

    PHP觀察者模式示例【Laravel框架中有用到】

    這篇文章主要介紹了PHP觀察者模式,結(jié)合實(shí)例形式分析了php觀察者模式的簡(jiǎn)單定義與使用操作技巧,需要的朋友可以參考下
    2018-06-06
  • php版本的cron定時(shí)任務(wù)執(zhí)行器使用實(shí)例

    php版本的cron定時(shí)任務(wù)執(zhí)行器使用實(shí)例

    這篇文章主要介紹了php版本的cron定時(shí)任務(wù)執(zhí)行器使用實(shí)例,是非常實(shí)用的一個(gè)功能,需要的朋友可以參考下
    2014-08-08

最新評(píng)論