为什么在PHP中使用if/else与or/exit?

为什么在PHP中使用if/else与or/exit?,php,if-statement,fopen,exit,Php,If Statement,Fopen,Exit,看到exit()让我想到: $filename = '/path/to/data-file'; $file = fopen($filename, 'r') or exit("unable to open file ($filename)"); 两个问题: 除了打开文件以使用exit(),还有哪些常见用例 由于并非每个人编写的函数都以exit()结尾,您如何知道在某些上下文中使用它 if/else和或/exit是否可以互换 如果您正在执行的功能失败,则代码无法继续,我建议您在这种情况下使用exi

看到
exit()
让我想到:

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

  • 除了打开文件以使用
    exit()
    ,还有哪些常见用例
  • 由于并非每个人编写的函数都以
    exit()
    结尾,您如何知道在某些上下文中使用它
  • if/else
    或/exit
    是否可以互换
    如果您正在执行的功能失败,则代码无法继续,我建议您在这种情况下使用
    exit
    。例如,读取所需的文件。

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

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


    if/else
    等同于
    …或任何()
    。这只是一种风格,后一种形式更简洁。

    在这种情况下,该语句中的
    是PHP的一种,当这样使用时,如果且仅当第一条语句由于错误而失败时,才会执行第二条语句

    由于
    fopen
    返回false,因此在第一部分失败后执行
    或exit
    语句

    为了更好地理解它,这里有一个短路评估的快速解释

    $x = 5;
    $y = 42;
    
    if ($x == 5 or $y == 42) {
        echo "x or y is true";
    }
    
    在上面的代码中,表达式
    $y==42
    从未计算过,因为第一个表达式为true,因此不需要计算

    在该示例中,它们使用相同的逻辑来决定是否对调用
    exit
    的语句求值

    要回答您的问题:

  • 我不会在打开文件失败时使用exit,除非程序非常具体。更好的做法是记录一个错误,然后将错误返回给调用者,这样他们就可以决定怎么做
  • 何时使用
    退出
    完全取决于您正在编写的代码
  • 考虑到短路的解释,是的,从这个意义上讲,它们是可互换的。使用
    或exit
    比使用
    if/else
    稍微短一点
  • 希望有帮助

  • CLI脚本,exit可以采用一个整数参数,该参数将反馈到控制台,以指示成功或某种形式的错误
  • 我不倾向于在应用程序代码中使用
    exit()
    die()
    ,因为首选异常。然而,我个人认为你可能把事情复杂化了一点。。。它会终止脚本执行,因此在需要终止脚本时使用它。老实说,我只在调试(一次性断点)时在执行过程中杀死脚本,这也不理想(同样,异常做得更好)
  • 的使用非常方便。不过这里有一个有趣的观点 为什么

    $resource = mysql_connect() || die('dead') 
    
    不工作


    答案是,
    =
    运算符优先于
    ,因此首先按如下方式进行赋值:
    ($resource=mysql\u connect())或die()
    。这样做就像做一个
    if(!($resource=mysql_connect()){die()}

    他们使用
    或exit
    ,因为你正在看
    exit
    @Gumbo的例子,我编辑了我的问题,删除了问题3中你提到的非感官部分。根据手册
    “die-相当于exit”
    。退出时,说明:
    终止脚本的执行。即使调用exit,关闭函数和对象析构函数也将始终执行。