php die()与exit()的区别实例详解


Posted in PHP onDecember 03, 2016

网上搜索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("不能打开该文件");

这种情况下,如果fopen函数被调用返回布尔值false时,die()将立即终止脚本,并马上打印传递给它的字符串,“死前还能说一两句话”。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
用PHP+java实现自动新闻滚动窗口
Oct 09 PHP
PHP新手上路(十二)
Oct 09 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
php文件扩展名判断及获取文件扩展名的N种方法
Sep 12 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
PDO::_construct讲解
Jan 27 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
详解Yii2 rules 的验证规则
Dec 02 #PHP
Yii框架数据模型的验证规则rules()被执行的方法
Dec 02 #PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 #PHP
thinkPHP交易详情查询功能详解
Dec 02 #PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 #PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 #PHP
PHP面向对象继承用法详解(优化与减少代码重复)
Dec 02 #PHP
You might like
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Python的requests网络编程包使用教程
2016/07/11 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
Python多进程编程常用方法解析
2020/03/26 Python
python导入库的具体方法
2020/06/18 Python
详解Python中的文件操作
2021/01/14 Python
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
项目合作计划书
2014/01/09 职场文书
《尊严》教学反思
2014/02/11 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
诚信考试倡议书
2014/04/15 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
物流业务员岗位职责
2015/04/03 职场文书
初中政治教学反思
2016/02/23 职场文书