簡體   English   中英

如何強制捕獲異常PHP

[英]How to force catching exceptions PHP

如何在PHP中強制捕獲異常?

我想強制異常捕獲如果方法可能返回和異常並且沒有添加到try catch塊。

例如:

如果沒有拋出異常,開發人員可能永遠不會知道他使用的方法可能拋出某種異常。 所以他不會抓住它。 我想確保可以拋出的每個異常都會被捕獲。

如果不是,我想要一個致命的錯誤,或者至少是一個例外。

更新:在評論中指出,前一個答案不是問題的實際答案。 PHP解析器本身不支持檢測PHP中未捕獲的異常或可能未捕獲的異常。 (不像Java編譯器)。 您必須使用外部工具進行靜態代碼分析,以提高代碼質量。 我找到了這個有趣的答案,例如: https//stackoverflow.com/a/8268875/171318


原答案:

您可以使用set_exception_handler()將函數注冊為全局異常處理程序。 如果沒有捕獲到異常,PHP引擎將調用此函數。

示例(來自PHP手冊):

<?php
function exception_handler($exception) {
  echo "Uncaught exception: " , $exception->getMessage(), "\n";
  exit(1);
}

set_exception_handler('exception_handler');

throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>

考慮到這個問題,我決定分享我為自己做的事情。

我將為我的應用程序添加編譯機制。 如果沒有先編譯它就不會工作。

這將有助於我強制開發人員編寫代碼,並且不會減慢應用程序的速度。

======================

對不起,我找不到一種方法來制作它而不會減慢應用程序。 我想到的最好的事情就是檢查文件修改時間。 如果它不等於編譯時間,則拋出有關編譯的異常。

但它會檢查參與腳本運行的所有文件的日期和時間。 因此,如果您在腳本執行中運行1000個文件,那么在我的電腦上它會減慢0.022秒。 如果您的腳本運行中包含大約50個文件,那么它將減慢0.0015秒

在大多數情況下,運行這種應用程序仍然會比修復開發人員提出的錯誤更便宜。 但這取決於您希望應用程序的速度有多快。

暫無
暫無

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

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