7

看到exit() PHP 文档让我想到:

$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
or exit("unable to open file ($filename)");

几个问题:

  1. 除了打开文件使用之外,还有哪些常见用例exit()
  2. 由于不是每个人都写过的每个函数都以 结尾exit(),你怎么知道在某些情况下使用它还是在其他情况下使用它?
  3. if/elseor/exit可互换的吗?
4

4 回答 4

4

在这种情况下,orin that statement 是 PHP 的逻辑运算符之一,当这样使用时,当且仅当第一个语句因短路评估而失败时,才会执行第二个语句。

由于fopen返回 false,该or exit语句在第一部分失败后被执行。

为了更好地理解它,这里是短路评估的快速解释。

$x = 5;
$y = 42;

if ($x == 5 or $y == 42) {
    echo "x or y is true";
}

在上面的代码中,表达式$y == 42永远不会被计算,因为没有必要因为第一个表达式为真。

在该示例中,他们使用相同的逻辑来决定是否评估调用exit.

为了解决您的问题:

  1. 除非程序非常具体,否则打开文件失败时我不会使用 exit。更好的做法是记录错误,然后将错误返回给调用者,以便他们决定要做什么。
  2. 何时使用exit完全取决于您正在编写的代码。
  3. 鉴于有关短路的解释,是的,它们在这个意义上是可以互换的。usingor exit比 using 短一点if/else

希望有帮助。

于 2012-07-15T21:37:43.053 回答
4
  1. CLI 脚本,exit 可以采用一个整数参数,该参数反馈到控制台以指示成功或某种形式的错误
  2. 我不倾向于在应用程序代码中使用exit()或使用die(),因为首选异常。但是,我个人认为你可能有点过于复杂了......它会杀死脚本执行,所以当你需要杀死脚本时使用它。老实说,我大多只在调试时(一次性断点)在执行过程中终止脚本,这也不理想(同样,异常做得更好)。
  3. 使用or大多是方便的。不过,这里有一个有趣的点......

为什么

$resource = mysql_connect() || die('dead') 

不行?

答案是=运算符优先,or因此首先进行赋值,如下所示:($resource = mysql_connect()) or die(). 这样,它就像做一个if(!($resource = mysql_connnect())) { die() }

于 2012-07-15T21:42:35.777 回答
2

我倾向于完全避免使用exit(),因为从用户的角度来看,这是一种处理错误的非常丑陋的方式。

如果您必须使用它,任何不可恢复的错误都将成为候选者。例如,数据库查询或连接失败,或远程请求失败。

if/else相当于...or whatever()。这只是一个风格的东西,后一种形式更简洁。

于 2012-07-15T21:36:35.850 回答
1

我想说exit,如果您正在执行的功能失败,您的代码将无法继续运行。例如读取需要的文件。

于 2012-07-15T21:35:38.483 回答