当前位置: 首页 > 面试题库 >

PHP try-catch块:它们能够捕获无效的arg类型吗?

孙修德
2023-03-14
问题内容

背景: 假设我有以下明显不正确的PHP:

    try{
        $vtest = '';
        print(array_pop($vtest));
    }catch(Exception $exx){}

为了使其与array_pop一起使用,$
vtest应该显然是一个数组,而不是字符串。但是,当我运行此代码时,会显示警告。我不希望那样,我只希望代码静默失败。

问题: 与其他导致这种情况不起作用的语言相比,PHP try-catch有什么特别之处吗?

免责声明: 仅供参考,确实有其他方法可以处理PHP中的这种情况,但是这些方法是不可取的。目的是避免:

“标志”技巧:

        $vtest = '';
        print(@array_pop($vtest)); // <-- would like to avoid this

类型转换:

        $vtest = '';
        $vtest = (array)$vtest;  
        print(array_pop($vtest));

问题答案:

从技术上讲,警告和声明在PHP中不是例外。要捕获异常,必须显式引发它,并且许多内置的函数库不引发异常(主要是因为它们是在PHP支持的异常之前编写的)。

如果以某种方式在现有的通知/警告/错误框架之上构建异常,那将是一件很不错的事,但这也许要求太多。



 类似资料:
  • 问题内容: 我想一个更清洁的方式来获得以下功能,以捕捉和在一个块: 有什么办法吗?还是我必须分开抓住它们? 并具有一个共享的基类,但它们也与其他我要介绍的类型共享它,因此我不能只抓住基类。 问题答案: 更新: 从PHP 7.1开始,此功能可用。 语法为: 文件:https://www.php.net/manual/en/language.exceptions.php#example-287 RFC

  • 问题内容: 我正在检查Java SE7的新功能,目前我正在: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch- multiple.html 关于捕获多个功能,当我遇到以下语句时: 注意:如果catch块处理多个异常类型,则catch参数隐式为final。在此示例中,catch参数ex是最终的,因此您不能在ca

  • 请求(正文)

  • 问题内容: 我一直使我的代码陷入无限的while循环中。 没什么可提高的,但是我无法终生解决! 有人请帮忙 我有幸只是重新创建了特定的错误,而没有我实际程序中所有的if语句。 捕获输入不匹配异常时,将发生无限循环。我认为这至少会要求用户重新输入他们的输入,但与其这样做,不如继续这样做: 它的行为就像只是忽略扫描仪对象sc ?! 问题答案: 没有扫描程序不会被跳过,它只是从输入的开头开始。从Java

  • 问题内容: e是Exception类型,但在以下代码中显示Exception1: 根据我的研究,“ e”应为Exception类型,它是Exception1和Exception2的通用基类。从第1行的消息可以明显看出这一点。 但是为什么: ?谢谢。 问题答案: 当您使用 多catch子句 (的形式),在编译时类型是最大的类型两种类型的共同点,因为课程的代码必须处理两种类型exception.Fro

  • 我正在修补,试图实现简单的路由。我按照他们的示例中所写的方式键入代码(但不包括s)https://github.com/rackt/react-router#whats-看起来像。 我在浏览器中得到这个错误: 未捕获错误:不变违反:元素类型无效:预期字符串(用于内置组件)或类/函数(用于复合组件),但得到了:对象。 这就是我要做的。 我在页面上附加脚本,和我的代码在。还有和和jQuery(所有三个