CLI程序开发 - 认识exit和die的作用 ¶
作者:KK
发表日期:2016.10.13
- 阅读本文章前请先确认你已经知道如何在命令行中运行PHP程序
数字参数会输出空白 ¶
稍有经验的程序员都知道,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(),所以我就不啰嗦了