php die()與exit()的區別執行個體詳解_php執行個體

來源:互聯網
上載者:User

網上搜尋die與exit兩個函數的區別,大部分的”標準答案”都是說die是退出並釋放記憶體,exit是退出但不釋放記憶體。

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

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

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

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

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

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

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

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代碼來確定:

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

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

現在關於die和exit的問題,我想大家應該可以確定了,只是名字不同,效果都是一樣的,沒有所謂的卸不卸載記憶體的問題。

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

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

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

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

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

$fp=fopen("./readme.txt","r") or die("不能開啟該檔案");

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.