php中die()與exit()的真正區別是什麼因,我們百度一下發現die是退出並釋放內存,exit是退出但不釋放內存了,那麼真的是這樣嗎,需要的朋友可以參考下
網上搜尋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程式碼來決定:
<?php var_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("不能打开该文件");
php 變數在前台html 的textarea 中如何換行以及換行修改如何在PHP後台取得
mysql預存程序詳解以及
PHP呼叫MYSQL預存程序實例
###################以上是php die()與exit()的差異實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。

自動加載PHP會在需要時自動加載類文件,從而通過減少內存使用和增強代碼組織來提高性能。最佳實踐包括使用PSR-4和有效組織代碼。

本文討論了在PHP中管理文件上傳大小的管理,重點是2MB的默認限制以及如何通過修改PHP.INI設置來增加它。

本文討論了PHP 7.1中引入的PHP中的無效類型,允許變量或參數為指定類型或NULL。它突出顯示了諸如提高可讀性,類型安全性和明確意圖的好處,並解釋瞭如何聲明

本文討論了unset()和unlink()功能在編程中的差異,重點關注其目的和用例。 unset()從內存中刪除變量,而unlink()從文件系統中刪除文件。兩者都對效率至關重要


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。