PHP try-catch block : are they able to catch invalid arg types?

标签 php arrays exception try-catch

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

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

为了与 array_pop 一起工作,$vtest 显然应该是一个数组,而不是一个字符串。然而,当我运行此代码时,会显示警告。我不想这样,我只想让代码静静地失败。

问题:与其他语言相比,PHP try-catch 是否有什么特别之处导致它无法正常工作?

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

“at-sign”技巧:

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

类型转换:

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

最佳答案

警告和通知在技术上不是 PHP 中的异常。要捕获异常,必须显式抛出它,并且许多内置函数库不会抛出异常(主要是因为它们是在 PHP 支持异常之前编写的)。

如果以某种方式在现有的通知/警告/错误框架之上构建异常会很好,但也许这要求太多了。

关于PHP try-catch block : are they able to catch invalid arg types?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1087365/

相关文章:

php - 测试 Laravel 中的重定向功能

php - insert语句不将记录插入数据库

c - 哨兵与传递计数

javascript - 在重新创建数组之前清除数组,以在数据刷新或重新加载时停止 Angular HTML SELECT 中的重复下拉选项

java - 无法将 View.getTag 转换为 ArrayList<String>

php - 我需要未知数量的坐标字段(或几个字段)如何去做?

php - 如何使用复选框从数据库中删除多行?

javascript - 选择所有以下划线 (_) 开头的对象键

java - 创建自定义注释来处理异常

exception - 升级到.net core 2.2之后,通过EF插入失败并出现错误