成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? php die()與exit()的區(qū)別實例詳解
全站頭部文字 我要出現(xiàn)在這里
php die()與exit()的區(qū)別實例詳解 701 2024-01-20   

網上搜索die與exit兩個函數(shù)的區(qū)別,大部分的”標準答案”都是說die是退出并釋放內存,exit是退出但不釋放內存。

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

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

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

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

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

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

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

zend_language_parser.c中,定義了一個宏

#define T_EXIT 300

還定義了一個enum,里面也有

enum yytokentype {
…
T_EXIT = 300,
….
}

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

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

<ST_IN_SCRIPTING>”exit” {
return T_EXIT;
}
<ST_IN_SCRIPTING>”die” {
return T_EXIT;
}

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

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

<?php
var_dump(token_get_all(“<?php die;exit;?>”));

返回的結果中die和exit對應的token code,都是300。

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

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

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

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

echo "1111";
exit(0);
echo "2222";
//22222不會被輸出,因為程序運行到exit(0)時,腳本已經被提前終止,“馬上斷氣”。

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

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

這種情況下,如果fopen函數(shù)被調用返回布爾值false時,die()將立即終止腳本,并馬上打印傳遞給它的字符串,“死前還能說一兩句話”。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!



主站蜘蛛池模板: 抖音网页版入口| 关于心情的词语| 彩云曲 电影| 蜘蛛侠5| 程皓枫| 帕米尔的春天笛子独奏| 郑荣植个人资料| 有关动物的成语| interracial| 安徽卫视| 第五单元初试身手| 胡家玮| 曲丹个人资料简介| 程瑶瑶| 科室对分级护理落实情况检查记录 | 李雪琴个人资料及简历| 沈敏| 七年级下册语文第八课生字拼音| 爱你电视剧演员表| 楚青丝完美人生免费阅读| xxxxxxxxxxxxxxxxx| 热带雨林电影完整版播放| 谍中谍7| 捆绑上天堂电影| 珍珠传奇 电视剧| stylistic device| 洪金宝电影大全| 红灯区1996| 烽火流金电视剧免费观看完整版| 房事性生活| 电影白上之黑| 隐形人4| 小女孩屁股| 韩国手机电影| 《杨贵妃淫史》三级| 模特走秀视频| 陈颖芝三级| 美少女战士变身| 落花流水电影完整版在线观看| 女人香韩国电影| 罗中立的《父亲》详案|

!!!站長長期在線接!!!

網站、小程序:定制開發(fā)/二次開發(fā)/仿制開發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103