欢迎光临
我们一直在努力

PHP中exit,exit(0),exit(1),exit(‘0’),exit(‘1’),exit(‘-1’),die,return的区别

die(‘1’)  die()和exit()都是中止脚本执行函数;其实exit和die这两个名字指向的是同一个函数,die()是exit()函数的别名。该函数只接受一个参数,可以是一个程序返回的数值或是一个字符串,也可以不输入参数,结果没有返回值。

参考:虽然两者相同,但通常使用中也有细微的选择性。

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

echo "1111";
exit(0);
echo "2222";

当程序出错时,可以给它传递一个字符串,它会原样输出在系统终端上,通常使用die()这个名字。

$fp=fopen("./readme.txt","r") or die("不能打开该文件");
//这种情况下,如果fopen函数被调用返回布尔值false时,die()将立即终止脚本,并马上打印
//传递给它的字符串,“死前还能说一两句话”。

同样的die(‘1’)也通exit(‘1’)一样,输出1

echo "begin";
die('1');
echo "end";
//输出begin1

exit(1) 不输出内容,结束程序

echo "begin";
exit(1);
echo "end";
//输出begin

exit(0) 不输出内容,结束程序

echo "begin";
exit(0);
echo "end";
//输出begin

exit(‘0’) 输出0 并结束程序

echo "begin";
exit('0');
echo "end";
//输出begin0

exit(‘1’) 输出1 并结束程序

echo "begin";
exit('1');
echo "end";
//输出begin1

return 返回值,后续的程序也不执行,值并不输出

echo "begin";
return 1;
echo "end";
//输出begin,return的值没有输出到屏幕,而是返回给了上一层

exit(-1)

exit或者main函数中的return, 只能使用0~255之间的值. -1 的unsigned值就是255

总结:

return是返回值
die是遇到错误才停止
exit是直接停止,并且不运行后续代码,exit()可以显示内容。
return就是纯粹的返回值了,但是也不会运行后续代码
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;

另附:PHP 使用exit(-1)为什么得到255退出码

说明

exit ([ string $status ] ) : voidexit ( int $status ) : void

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

exit 是个语法结构,如果没有 status 参数要传入,可以省略圆括号。

参数

status

如果 status 是一个字符串,在退出之前该函数会打印 status 。

如果 status 是一个 integer,该值会作为退出状态码,并且不会被打印输出。 退出状态码应该在范围0至254,不应使用被PHP保留的退出状态码255。 状态码0用于成功中止程序。

返回值

没有返回值。

string exec ( string $command [, array &$output [, int &$return_var ]] )
调用一个程序, 程序退出-1, 但是PHP得到的为什么是255?

这个问题简单的说, 是因为exit或者main函数中的return, 只能使用0~254之间的值. -1 的unsigned值就是255.

那么复杂点的说呢?

我们知道, 在Shell中, 运行一个命令, 一个程序, 都是fork一个子进程(然后exec)来执行的, 而这个程序的退出码, 被Shell(父进程), 通过wait来收集而后报告给我们的.

pid_t wait(int *statloc);

而对于wait来说, 历史上原因, 他将通过statloc返回一个16bit的interge(现在也有用32位表示的, 但是会兼容已有的设计). 这16bits的interge中, 高8位就是程序退出的值(exit, 或者return), 而低八位表示导致这个程序退出的信号(其中一位表示是否有Core文件产生), 如果程序是正常退出, 那么低八位为0[1].

所以, 如果我们返回-1, 并且因为我们是正常退出, 所以Shell通过wait收集到的子进程退出状态是:

11111111 00000000

而高八位作为unsigned, 就是255了.

另外, 补充一下, 在Linux的内建Shell命令中, 很多都会遵守一个退出状态码的约定, 具体的值对应的意思[2]:
赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » PHP中exit,exit(0),exit(1),exit(‘0’),exit(‘1’),exit(‘-1’),die,return的区别

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址