关于exit()以及 die()与exit()区别

本文深入探讨了PHP中exit()和die()函数的区别与联系,虽然二者在功能上几乎相同,都用于提前终止脚本执行,但它们在使用习惯、名称及内部处理方式上存在细微差别。文章通过代码示例展示了这两个函数如何影响脚本的执行流程,并解释了它们在PHP源码层面的处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来了解一下exit(),

exit()是个语法结构

中止脚本的执行。 尽管调用了 exit(), Shutdown函数 以及 object destructors 总是会被执行。

<?php
class Foo
{
    public function __destruct()
    {
        echo 'Destruct: ' . __METHOD__ . '()' . PHP_EOL;
    }
}

function shutdown()
{
    echo 'Shutdown: ' . __FUNCTION__ . '()' . PHP_EOL;
}

$foo = new Foo();
register_shutdown_function('shutdown');

exit();
echo 'This will not be output.';
?>

程序输出:

Shutdown: shutdown()
 Destruct: Foo::__destruct()
 

1、用法习惯不同,当传递给exit和die函数的值为0时,意味着提前终止脚本的执行,通常用exit()这个名字。

2、名字不同,其实PHP手册已经说过“die — Equivalent to exit().This language construct is equivalent to exit(). ”两者只是别名关系,除此之外完全一样。

3、源码的处理方式不同,无论是别名函数还是别名语言结构,从实际效果角度讲,都是一样的,但是源码的处理方式还是有一定的差异。

扩展资料:

die()和exit()差异实例:

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代码来确定:

<?phpvar_dump(token_get_all(“<?php die;exit;?>”));

返回的结果中die和exit对应的token code,都是300。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻开门2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值