php中为啥不用if代替try

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中为啥不用if代替try相关的知识,希望对你有一定的参考价值。

这是两个 东西好咩
try 是处理异常的 可以结合 throw 及时抛出异常,然后提前结束某个方法 然后提交给catch捕获。最后还可以finally 做内存、资源释放工作

举个栗子

比如判断 post来的数据 是否合法

你可以用if 判断 $_POST 然后 不合法的话 可以exit掉php脚本

但是 用try 再镶嵌 if判断 再加throw抛出异常, 不但可以 集中在catch中处理这些错误,更可以根据你自定义的异常等级 有不同的处理方式。

写 高度集成的类的时候 try catch 非常好用。 就是因为他 可以 抛出 Expection 类。

另外 if 是根据你的 后面表达式的 真假 来执行内部 流程控制
而try 仅仅是发生异常的时候 废弃掉try 中的过程体 再在catch中捕获这些异常。
或者自己用throw强行抛出异常 也可以,同时也会终止掉try的过程体

至于你自己是否抛出自定义的异常,到时可选的。

详细请参阅php手册 异常处理章节。
参考技术A try 主要是用来抛出错误提示的,if没有这个功能

在PHP Try Catch块中抛出异常

我在Drupal 6 .module文件中有一个PHP函数。我正在尝试在执行更密集的任务(例如数据库查询)之前运行初始变量验证。在C#中,我曾经在我的Try块的开头实现了IF语句,如果验证失败则会抛出新的异常。抛出的异常将在Catch块中捕获。以下是我的PHP代码:

function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    throw $e->getMessage();
  }
}

但是,当我尝试运行代码时,它告诉我对象只能在Catch块中抛出。

提前致谢!

答案
function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    /*
        Here you can either echo the exception message like: 
        echo $e->getMessage(); 

        Or you can throw the Exception Object $e like:
        throw $e;
    */
  }
}
另一答案

要重新做

 throw $e;

不是消息。

另一答案

只需从catch块中删除throw - 将其更改为echo或以其他方式处理错误。

它没有告诉你只能在catch块中抛出对象,它告诉你只能抛出对象,并且错误的位置在catch块中 - 存在差异。

在catch块中,你试图抛出你刚抓到的东西 - 在这种情况下无论如何都没有意义 - 而你试图抛出的东西是一个字符串。

你正在做的事情的真实世界类比是接球,然后试图在其他地方抛出制造商的标志。您只能抛出整个对象,而不是对象的属性。

另一答案
throw $e->getMessage();

你试着扔一个string

作为旁注:例外通常是定义应用程序的异常状态,而不是验证后的错误消息。当用户为您提供无效数据时,也不例外

另一答案

投掷需要Exception实例化的对象。只有$e捕获可以发挥作用。

throw $e

以上是关于php中为啥不用if代替try的主要内容,如果未能解决你的问题,请参考以下文章

java 为啥枚举能不用最好不要用呢?有啥问题吗

ad中跳线为啥用电阻代替

汽车为啥不用netconf

php基础:switch cass控制结构 代替if

为啥很多程序员不用switch,而是大量的if……else if?

为啥我的 If 语句在 PHP 中接受不正确的字符串条件?