PHP:exit()、die() 和 return 有啥区别;在“自我”和包含的文件中?

Posted

技术标签:

【中文标题】PHP:exit()、die() 和 return 有啥区别;在“自我”和包含的文件中?【英文标题】:PHP: What is the difference between exit(), die() and return; within "self" and included files?PHP:exit()、die() 和 return 有什么区别;在“自我”和包含的文件中? 【发布时间】:2012-12-07 17:54:20 【问题描述】:

我还在学习 php。终止脚本时,exit()die();return;有什么区别?:

    在同一个文件中(单一脚本文件) 在 include 的子级内 在包含的父级中

【问题讨论】:

exit 和 die 是一回事,你的问题的答案在这里:***.com/questions/3484050/… 以前有人问过。查看这个问题的答案:***.com/questions/8490731/exit-die-return-false @Supericy 是也不是。不,因为如果你关心我的详细点,我想知道这些对包括以及其他事情的影响 @Supericy 本质上它们可能看起来一样,但我问的是不同的事情 @Omar Die 和 exit 是相同的,die 只是 exit 的别名。我给你的链接回答了你的问题。退出会暂停所有的执行。全局返回将停止当前脚本并返回到调用脚本(如果有的话)。 【参考方案1】:

dieexit (equivalent functions)

终止脚本的执行。

return

将程序控制权返回给调用模块。执行恢复于 被调用模块调用之后的语句。

如果从函数内部调用,则立即返回语句 结束当前函数的执行,并将其参数返回为 函数调用的值。 return 也结束了一个 eval() 语句或脚本文件。

如果从全局范围调用,则执行当前脚本 文件结束。如果包含或需要当前脚本文件, 然后将控制权传递回调用文件。此外,如果 包含当前脚本文件,则返回的值将 作为包含调用的值返回。如果从调用返回 在主脚本文件中,然后脚本执行结束。如果 当前脚本文件由 auto_prepend_file 命名或 php.ini 中的 auto_append_file 配置选项,然后是那个脚本 文件的执行结束。


dieexit

die()exit() 在 PHP 中的区别在于它们的起源

exit() 来自exit() in Cdie() 来自die in Perl

PHP 手册

die 的 PHP 手册:

这种语言结构等价于exit()

exit 的 PHP 手册:

注意:这种语言结构等同于die()

List of Function Aliases 的 PHP 手册:

die是主函数exit()的别名


其他语言不同

die()exit()在其他语言中不同,但在 PHP 中它们是相同的。

来自Yet another PHP rant:

...作为 C 和 Perl 编码器,我已经准备好回答:“为什么,exit() 只是保释 以数字退出状态关闭程序,而 die() 打印出 错误消息到 stderr 并以 EXIT_FAILURE 状态退出。”但是然后 我记得我们在 PHP 的混乱语法领域。

在 PHP 中,exit() 和 die() 是相同的。

设计师显然认为“嗯,我们借用exit() from C。还有Perl 如果我们也接受die() as is from Perl,人们可能会喜欢它。 哎呀!我们现在有两个退出函数!让我们让他们俩 可以将字符串或整数作为参数并使它们相同!”

最终结果是,这并没有真正让事情变得“更轻松”, 只是更令人困惑。 C 和 Perl 编码器将继续使用 exit() 来 只抛出一个整数退出值,而 die() 抛出一个错误消息 并以失败退出。新手和以 PHP 为第一语言的人 可能会想“嗯,两个退出函数,我应该选择哪一个 使用?”手册没有解释为什么会有exit()和die()。

一般来说,PHP 有很多像这样奇怪的冗余——它试图 对来自不同语言背景的人友好, 但在这样做的同时,它会产生令人困惑的冗余。

【讨论】:

【参考方案2】:

Return 是返回一个值 (char,int,string,array...) 并退出函数。

来自 php 手册:

注意:这种语言结构等价于 die()。

但是dieexit还是有区别的:

使用 die() 你可以发布一个字符串: die("An error occurred");

使用 exit() 的结果相同

<?php
    echo("An error occurred <br>");
    exit(0);
?>

或者如果你是 cli 或 unix shell:

在命令行上使用 PHP,die("An error occurred") 简单地将“An error occurred”打印到 STDOUT 并以正常退出代码 0 终止程序。

<?php
    fwrite(STDERR, "An error occurred \n");
    exit(0); //
?>

【讨论】:

【参考方案3】:

Return 返回一个值。这可以是任何东西,并且适用于函数。

What are the differences in die() and exit() in PHP?

http://php.net/manual/en/function.return.php

【讨论】:

对于我在php.net/manual/en/function.return.php 阅读的内容,return 还可以停止执行包含的脚本文件:“...return 也将结束...脚本文件的执行。” 引用:另一方面,return 结束函数调用并返回给调用者。在程序结束时,return 设置返回给操作系统的状态值;无论如何,程序都会退出。 从 PHP 7.1.0 开始,不带参数的 return 语句会触发 E_COMPILE_ERROR,除非返回类型为 void,在这种情况下,带参数的 return 语句会触发该错误。

以上是关于PHP:exit()、die() 和 return 有啥区别;在“自我”和包含的文件中?的主要内容,如果未能解决你的问题,请参考以下文章

解析php中die(),exit(),return的区别

php中die(),exit(),return的区别

php调试之路

如何在 Go 中实现 PHP 函数 `die()`(或 `exit()`)?

PHP中的die()和exit()有啥区别?

说一下PHP中die()和exit()区别