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]: