2023年php函數(shù)的四要素 php常用函數(shù)優(yōu)秀

格式:DOC 上傳日期:2023-04-30 18:51:15
2023年php函數(shù)的四要素 php常用函數(shù)優(yōu)秀
時(shí)間:2023-04-30 18:51:15     小編:zdfb

在日常學(xué)習(xí)、工作或生活中,大家總少不了接觸作文或者范文吧,通過文章可以把我們那些零零散散的思想,聚集在一塊。大家想知道怎么樣才能寫一篇比較優(yōu)質(zhì)的范文嗎?下面是小編幫大家整理的優(yōu)質(zhì)范文,僅供參考,大家一起來看看吧。

php函數(shù)的四要素 php常用函數(shù)篇一

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

還有人說exit()并不一定就能讓程序結(jié)束,因?yàn)榭梢允褂靡驗(yàn)榭梢允褂胷egister_shutdown_function注冊(cè)一個(gè)或多個(gè)exit之后才執(zhí)行的函數(shù),并且還有對(duì)象的析構(gòu)函數(shù)也會(huì)在exit之后執(zhí)行。但是die()一定能結(jié)束程序。

這個(gè)問題php官方給的答案是兩個(gè)函數(shù)作用等同。

“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)存的問題。

s("content_relate");

【php函數(shù)die()與exit()的真正區(qū)別】相關(guān)文章:

關(guān)于linux系統(tǒng)命令中exit與exit的區(qū)別

08-23

php函數(shù)的區(qū)別及用法

10-01

php的語言結(jié)構(gòu)和函數(shù)的區(qū)別

09-19

asp與php的區(qū)別

09-29

的區(qū)別

08-19

java與php的區(qū)別

06-08

php與js有哪些區(qū)別

07-26

php內(nèi)部函數(shù)的定義

09-28

php數(shù)組函數(shù)知識(shí)

10-13

【本文地址:http://mlvmservice.com/zuowen/2772678.html】

全文閱讀已結(jié)束,如果需要下載本文請(qǐng)點(diǎn)擊

下載此文檔