CLI程序开发 - 认识exit和die的作用

  • 作者:KK

  • 发表日期:2016.10.13



数字参数会输出空白

稍有经验的程序员都知道,exit和die在参数为数字的时候是不会有输出的:

exit(999); //空白

//或

die(123); //空白

在网页上测试时根本看不到任何想要的数字输出,而我这里想说的是数字参数其实是另有用途的


真正的作用

用途就是为了在标准的输入输出交互中告诉调用者“本次运行的结果有没有出现异常或失败”

比如我们想表达运行失败,试着先写一个php文件,代码是这样的:

echo '运行失败';

然后我们再创建一个bat脚本写如下代码:

@echo off
php test.php
if errorLevel 1 (
	echo php返回了失败
) else (
	echo php返回了成功
)
pause

结果一运行,它最后居然说“php返回了成功” 其实这不是我想要的输出结果呀

好了,怎么才能告诉bat是失败的呢?至少你可以试试如果在脚本里写return false是会报错的,因为return语句必须在一个函数/方法体里才可以


其实相当于返回一个状态码

哦!你明白了

exit(1)就可以了,就相当于返回一个状态码一样,我建议称为运行结果码,标准输入输出是将0定义为正常的运行结果码,而非0就是不正常的

虽然我们平时写命令行程序没有执行过exit(0)这样的代码,但其实当运行结束的时候,可以想像到底层是发现我们没有返回0就自动返回了0给外面,否则就把我们的返回值传给外面


再试试这段PHP代码:

$testFile = date('d') . '.txt';
if(!file_exists($testFile)){
	echo '文件' . $testFile . '不存在,请先创建这个文件!';
	exit(1);
}

if(file_get_contents($testFile) != time()){
	echo '非法的文件内容!';
	exit(2);
}

exit(0);

在命令行运行后,直接在命令行输入echo %errorLevel%,输出的就是exit语句返回的结果码,如果是Linux系统的话就是echo $?则也是上一条命令运行的结果码,只是两个操作系统系统用了不同的表示法,反正这个概念是存在的


关于die函数

官方手册在die函数里说了,该函数的等同于 exit(),所以我就不啰嗦了