真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

die()與exit()在php中有什么不同-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)die()與exit()在php中有什么不同,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

網(wǎng)站制作、建網(wǎng)站找專業(yè)的建站公司成都創(chuàng)新互聯(lián):定制網(wǎng)站、模板網(wǎng)站、仿站、小程序設(shè)計(jì)、軟件開發(fā)、手機(jī)APP定制開發(fā)等。做網(wǎng)站價(jià)格咨詢成都創(chuàng)新互聯(lián):服務(wù)完善、十年建站、值得信賴!網(wǎng)站制作電話:18980820575

網(wǎng)上搜索die與exit兩個(gè)函數(shù)的區(qū)別,大部分的”標(biāo)準(zhǔn)答案”都是說die是退出并釋放內(nèi)存,exit是退出但不釋放內(nèi)存。

這個(gè)解釋顯然是錯(cuò)的,PHP手冊(cè)中已經(jīng)說過“die — Equivalent to exit().This language construct is equivalent to exit(). ”兩者只是別名關(guān)系,除此之外完全一樣。

不過我還是很好奇,決定從源碼中找找線索,看看php是如何處理的這個(gè)“別名”。

首先要清楚一點(diǎn),die和exit都是”language construct”而非函數(shù),網(wǎng)上也有很多說某某某有返回值是函數(shù),某某無返回值是結(jié)構(gòu),很多初學(xué)者總搞不清語言結(jié)構(gòu)和函數(shù)的區(qū)別,用通俗點(diǎn)的話講,語言結(jié)構(gòu)可以理解為語法本身的一種標(biāo)識(shí)。像+、-、*、/這些也都是語言結(jié)構(gòu),if、else、for、while,這些都是語言結(jié)構(gòu)。是語法本身的一部分。任何語言都會(huì)有這些東西,因?yàn)橛?jì)算機(jī)看到+不會(huì)認(rèn)為是應(yīng)該做加法的。這需要編譯器轉(zhuǎn)換為機(jī)器碼也就是cpu能夠識(shí)別的指令集。

php執(zhí)行源碼時(shí)的整個(gè)過程為,首先按照zend_language_scanner.l中定義的,將源碼中的echo、if之類的語言結(jié)構(gòu)轉(zhuǎn)換成類似的T_ECHO、T_IF這些token,并且會(huì)去掉源碼中的空格,注釋這些與程序邏輯無關(guān)的字符。,就形成了一些簡(jiǎn)短的表達(dá)式,這就是詞法分析階段。然后會(huì)按照zend_vm_opcodes.h中定義的,將這些token轉(zhuǎn)換為op code。然后一條一行的執(zhí)行這些op code。

上面大概解釋了php的編譯和執(zhí)行的過程,以及語言結(jié)構(gòu)的定義。下面進(jìn)入正題。

我們也應(yīng)該記得,php中有很多別名函數(shù),比如:implode和join。無論是別名函數(shù)還是別名語言結(jié)構(gòu),從實(shí)際效果角度講,都是一樣的,不過源碼的處理方式肯定還是不一樣的。

我們先看看這個(gè)別名語言結(jié)構(gòu)是如何處理的,稍后再看別名函數(shù)。

zend_language_parser.c中,定義了一個(gè)宏

#define T_EXIT 300

還定義了一個(gè)enum,里面也有

enum yytokentype {
…
T_EXIT = 300,
….
}

這里告訴我們,T_EXIT這個(gè)token,它的code是300。

 再看zend_language_scanner.l,其中有這么幾行代碼。

”exit” {
return T_EXIT;
}
”die” {
return T_EXIT;
}

很明顯,php做詞法分析時(shí),無論遇到exit還是die,都會(huì)返回T_EXIT這個(gè)token。從這里酒可以證明,die和exit,再php內(nèi)部處理是完全一樣的。


也可以用下列php代碼來確定:

”));

返回的結(jié)果中die和exit對(duì)應(yīng)的token code,都是300。


現(xiàn)在關(guān)于die和exit的問題,我想大家應(yīng)該可以確定了,只是名字不同,效果都是一樣的,沒有所謂的卸不卸載內(nèi)存的問題。

 PHP手冊(cè):die()Equivalent to exit()。

說明:die()和exit()都是中止腳本執(zhí)行函數(shù);其實(shí)exit和die這兩個(gè)名字指向的是同一個(gè)函數(shù),die()是exit()函數(shù)的別名。該函數(shù)只接受一個(gè)參數(shù),可以是一個(gè)程序返回的數(shù)值或是一個(gè)字符串,也可以不輸入?yún)?shù),結(jié)果沒有返回值。


參考:雖然兩者相同,但通常使用中也有細(xì)微的選擇性。例如:
當(dāng)傳遞給exit和die函數(shù)的值為0時(shí),意味著提前終止腳本的執(zhí)行,通常用exit()這個(gè)名字。

echo "1111";
exit(0);
echo "2222";
//22222不會(huì)被輸出,因?yàn)槌绦蜻\(yùn)行到exit(0)時(shí),腳本已經(jīng)被提前終止,“馬上斷氣”。

當(dāng)程序出錯(cuò)時(shí),可以給它傳遞一個(gè)字符串,它會(huì)原樣輸出在系統(tǒng)終端上,通常使用die()這個(gè)名字。

$fp=fopen("./readme.txt","r") or die("不能打開該文件");

看完上述內(nèi)容,你們對(duì)die()與exit()在php中有什么不同有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)頁(yè)題目:die()與exit()在php中有什么不同-創(chuàng)新互聯(lián)
URL分享:http://weahome.cn/article/dgppoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部