PHP中die和exit的区别

转载 2015年11月19日 11:10:16

die和exit都是语言结构而非函数,用通俗点的话讲,语言结构可以理解为语法本身的一种标识。像+、-、*、/这些也都是语言结构,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中exit、die和return的区别

exit和die并没有实质的区别,手册里这样描述: die (PHP 4, PHP 5) die — Equivalent to exit() Description T...
  • dyx422190160
  • dyx422190160
  • 2014年11月29日 09:08
  • 1133

exit()与die()在PHP中的区别

先思考一个问题: 如下代码会向页面显示什么? 曾经有段时间我一直认为 页面会显示 123,但实践结果告诉我,答案错了,页面一片空白! 一直不知道为什么,死活不输出123,为了让页面输出123...
  • qq_16619037
  • qq_16619037
  • 2016年02月26日 14:01
  • 188

【php】exit()与die()函数详解

PHP手册:die()Equivalent to exit()。 说明:die()和exit()都是中止脚本执行函数;其实exit和die这两个名字指向的是同一个函数,die()是exit()函数的别...
  • lzm18064126848
  • lzm18064126848
  • 2016年01月08日 21:02
  • 288

PHP中exit()与die()的区别

先思考一个问题: 如下代码会向页面显示什么? php die(123); ?> 曾经有段时间我一直认为 页面会显示 123,但实践结果告诉我,答案错了,页面一片空白! 一直...
  • chen529834149
  • chen529834149
  • 2017年08月08日 16:42
  • 166

php中的die()和exit()区别

先思考一个问题: 如下代码会向页面显示什么? 1 2 die(123); 3 ?> ...
  • u010566813
  • u010566813
  • 2015年08月26日 04:58
  • 363

PHP中exit()与die()的区别

PHP手册:die()Equivalent to exit()。 说明:die()和exit()都是中止脚本执行函数;其实exit和die这两个名字指向的是同一个函数,die()是exit()函数的...
  • DickyQie
  • DickyQie
  • 2018年01月06日 08:54
  • 93

别名函数之die()与exit()的真正区别

网上搜索die与exit两个函数的区别,大部分的”标准答案”都是说die是退出并释放内存,exit是退出但不释放内存。 这个解释显然是错的,PHP手册中已经说过“die — Equivalent t...
  • u011598153
  • u011598153
  • 2014年08月21日 21:09
  • 964

php 中return、exit()、die()用法比较

php中终止程序的运行有三种方式:主脚本程序中使用return、脚本中使用exit()、die(),三者所在的脚本文件他们之后的代码都不会执行了。php开发模式下想直接看到变量的值使用exit()、d...
  • ydm19891101
  • ydm19891101
  • 2017年05月20日 09:43
  • 360

【PHP】别名函数之die()与exit()的真正区别

网上搜索die与exit两个函数的区别,大部分的”标准答案”都是说die是退出并释放内存,exit是退出但不释放内存。 这个解释显然是错的, PHP手册中说“die — Equivalent t...
  • u012923198
  • u012923198
  • 2017年03月03日 14:50
  • 98

别名函数之die()与exit()的真正区别

网上搜索die与exit两个函数的区别,大部分的”标准答案”都是说die是退出并释放内存,exit是退出但不释放内存。 这个解释显然是错的,PHP手册中已经说过“die — Equivalent t...
  • bzxcl
  • bzxcl
  • 2015年10月27日 11:29
  • 339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP中die和exit的区别
举报原因:
原因补充:

(最多只允许输入30个字)