为什么if / else vs.或/退出PHP?

时间:2012-07-15 21:28:56

标签: php if-statement fopen exit

看到exit() PHP documentation让我想到了:

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

夫妻问题:

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

4 个答案:

答案 0 :(得分:4)

  1. CLI脚本,exit可以采用一个整数参数,该参数反馈给控制台以指示成功或某种形式的错误
  2. 我不倾向于在应用程序代码中使用exit()die(),因为首选是例外。但是,我个人认为你可能会使事情过于复杂......它会杀死脚本执行,因此在你需要杀死脚本时使用它。说实话,我大多数时候只是在调试(一次性断点)时执行中断脚本,这也不理想(再次例外做得更好)。
  3. 使用or非常方便。这是一个有趣的观点......
  4. 为什么

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

    不起作用?

    答案是=运算符优先于or,因此首先进行分配:($resource = mysql_connect()) or die()。这样就像做if(!($resource = mysql_connnect())) { die() }

    一样

答案 1 :(得分:3)

在该上下文中,该语句中的or是PHP的logical operators之一,当使用它时,如果将执行第二个语句,并且只有第一个语句时才执行由于short circuit evaluation而失败。

由于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. 鉴于有关短路的解释,是的,它们在这个意义上是可以互换的。使用or exit只比使用if/else短一点。
  4. 希望有所帮助。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

我会说如果您正在执行的功能失败,您的代码无法继续使用exit。例如,读取所需的文件。