亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言

PHP函數(shù)die()與exit()的真正區(qū)別

時間:2024-09-24 14:23:25 php語言 我要投稿
  • 相關(guān)推薦

PHP函數(shù)die()與exit()的真正區(qū)別

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

  還有人說exit()并不一定就能讓程序結(jié)束,因為可以使用因為可以使用register_shutdown_function注冊一個或多個exit之后才執(zhí)行的函數(shù),并且還有對象的析構(gòu)函數(shù)也會在exit之后執(zhí)行。但是die()一定能結(jié)束程序。

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

  “die — Equivalent to exit().This language construct is equivalent to exit(). ”兩者只是別名關(guān)系,除此之外完全一樣。

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

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

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

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

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

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

  zend_language_parser.c中,定義了一個宏

  #define T_EXIT 300

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

  enum yytokentype {

  …

  T_EXIT = 300,

  ….

  }

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

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

  ”exit” {

  return T_EXIT;

  }

  ”die” {

  return T_EXIT;

  }

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

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

  ”));

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

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

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

PHP函數(shù)的區(qū)別及用法10-27

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

php常用的系統(tǒng)函數(shù)05-05

PHP類與構(gòu)造函數(shù)07-01

PHP數(shù)組函數(shù)知識10-24

PHP函數(shù)知識總結(jié)09-29

PHP數(shù)據(jù)過濾函數(shù)09-05

PHP中php://input和$-POST的區(qū)別08-26

Java和PHP的區(qū)別09-09

php如何禁用eval函數(shù)06-12