【问题标题】:How to catch PHP "Fatal error: Uncaught TypeError"如何捕获 PHP“致命错误:未捕获的 TypeError”
【发布时间】:2019-04-20 05:55:28
【问题描述】:

我正在尝试 PHP7 类型提示。 以下代码给出了“致命错误”。我尝试了几种方法都无济于事。 当我给出 int 值时,它可以正常工作。但是如果我给字符串它会崩溃。如何在不崩溃页面的情况下捕获类型错误。代码是:

<?php 

    class Book{
            public $price;
            public function price(int $price){
                if (is_numeric($price)){
                echo 'This is Number ' . $price;
                }else{
                    echo 'Please enter number';
                } 
            }
        }

    $book = new Book();
    $book->price('Hello');

?>

【问题讨论】:

  • 大家好,最重要的是,我怎样才能在没有此类输入导致我的网站崩溃的情况下捕获此类错误?

标签: php type-hinting


【解决方案1】:

这就是类型提示的工作原理。如果你告诉 PHP 期望一个参数有一个 int 值,并且你传递一个不是整数的值,你会得到一个 TypeError 异常。请参阅manual

您可以使用 try/catch 块稍微不同地实现您的代码:

try {
    $book->price('Hello');
}
catch (TypeError $e) {
    echo 'Please enter number';
}

在这种情况下,您可以将price 函数简化为:

public function price(int $price){
    echo 'This is Number ' . $price;
}

【讨论】:

    【解决方案2】:

    您将函数设置为接受int,因此您不能将字符串分配给它, 试试这个代码。

    从函数参数中删除int

    class Book{
            public $price;
            public function price($price){
                if (is_numeric($price)){
                echo 'This is Number ' . $price;
                }else{
                    echo 'Please enter number';
                } 
            }
        }
    
    $book = new Book();
    $book->price('hello');
    

    【讨论】:

    • 不,亲爱的纳赛尔。我想要用户的这个输入。用户可能会插入 int 或字符串。如果插入了 int,我想说“好”,如果没有插入 INT,我想显示“请插入 int”或类似的内容。
    • @Aagii 好的,根据您的代码,如果函数参数是字符串,它将打印第二个回声,如果是整数,它将打印第一个回声。
    • @Aagii 其实is_numeric() 会检查输入
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2022-12-10
    • 2016-10-28
    • 2021-02-06
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多