簡體   English   中英

異常不會在PHP實例中冒泡嗎?

[英]Exceptions don't bubble through instances in PHP?

我收到有關我的類的__toString()方法中引發的異常的錯誤,即使其中存在try...catch() 我做了一些跟蹤下來,事實證明我的實例的對象在被拋出異常__toString()這意味着它沒有被包含類趕一網打盡!

我寫了一些測試代碼作為演示:

class test {
      public function __toString() {
        try {
            $b = new b();
            echo (string)$b;
        } catch (exception $e) {
            return (string)$e;
        }
    }
}

class b {
    public function __toString() {
        throw new Exception ("test");
    }
}

$test = new test();

echo $test;

我以為異常總是在代碼中“冒泡”,直到異常被捕獲或完全消除。

有什么解決方法嗎? 我班上的實例來自圖書館。 我不知道我是否可以對其進行可維護的修改,使其在自己的__toString()得到捕獲。

根據魔術方法docs中 PHP的__toString()部分:

警告

您不能從__toString()方法內引發異常。 這樣做將導致致命錯誤。

在執行代碼片段時,您會收到一條消息,指出相同的內容:

PHP致命錯誤:方法b :: __ toString()不得引發異常

有一個功能要求這里來支持這一點,其中指出,在物聯網目前的狀態這將是很難實現的。

綜上所述,解決此問題的正確方法是向您的上游庫提交補丁,以免引發該方法的異常。

如果這不可能,那么為您解決的方法是:

echo (string)$b;

echo $b->__toString();

在這種情況下,您可以按預期捕獲異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM