【问题标题】:PHP try-catch supports short notation?PHP try-catch 支持简写法吗?
【发布时间】:2012-01-09 22:59:43
【问题描述】:

这合法吗?不在我的工作电脑附近,所以无法测试

try
    someClass::someStaticFunction();
catch(Exception $e)
    $e->getMessage();

特别是缺少括号,类似于 if-else 语句

if(someBool)
    someClass::someStaticFunction();
else
    someClass::someOtherFunction(); 

干杯!

【问题讨论】:

  • 我确定 if else 是正确的

标签: php try-catch notation


【解决方案1】:

不,您必须使用大括号。请注意,您可以按类型捕获异常:

try {
  someClass::someStaticFunction();
} catch (MyException $e) {
  // do specific stuff for this exception
} catch (Exception $e) {
  // do stuff for other exceptions
}

【讨论】:

    【解决方案2】:

    不,它似乎不起作用。

    在这里查看我的示例:http://codepad.org/BpSBiPDY

    【讨论】:

      【解决方案3】:

      不,不是,try/catch 没有替代语法...它只有 8 个字符加上 Exception $e... 这不是很长

      【讨论】:

      • 如果公司遵循的编码标准要么没有括号,要么每个括号都有自己的换行符,那么它是相当令人讨厌的
      • 什么讨厌?如果一家公司有这些代码标准,那么无论如何你都应该遵守它们,所以所有代码都应该看起来“令人讨厌”......并且任何拥有这样编码标准的公司也不太可能允许替代语法......但代码质量通常不是通过源文本在屏幕上的美观程度来衡量的。
      • @PandemoniumSyndicate 确实如此,我个人讨厌为单行表达式编写括号,但 try-catch 似乎是唯一没有替代语法的构造。
      • @Narf 我的意思是,在规则例外的构造中,try-catch 似乎是一个非常合理的构造。但是还是……
      • 是的......我知道 - 这很痛苦。
      【解决方案4】:

      try-catch 在我知道的所有语言(C#、JavaScript 等)中都需要强制括号;

      我认为原因是从一开始就避免出现(小或大)混乱,例如来自 if() 构造,因为它支持缺少括号和可选的 else 部分;

      例如,在代码中:

      if(a==0) if(b==3) ++a; else ++b;
      

      if() 指的是哪个else 部分?

      我们都知道,在上面的代码中,else 部分指的是第二个if()(最接近的if()),但有时当您快速输入代码(或快速检查代码时)会混淆已经输入了),而且所有人都知道这一点。

      所以,因为在try catch(和finally)中,catchfinally 部分是可选的,catch 部分甚至可以重复(我的意思是,你可以把更多 catch 用于捕获不同类型错误的部分),我认为语言的设计者希望避免从一开始就可能因缺少括号而产生的歧义是一些关键情况。

      【讨论】:

        猜你喜欢
        • 2013-08-27
        • 2019-02-28
        • 2014-01-10
        • 2012-05-27
        • 1970-01-01
        • 2012-11-25
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多