通常PHP腳本會在E_NOTICE之後繼續運行,有沒有辦法在函數的上下文中將其提升爲致命錯誤,也就是說,我只需要在通知中僅退出函數而不是核心PHP函數,即全局函數。如何讓PHP退出E_NOTICE?
回答
您可以創建自定義錯誤處理程序來捕獲E_NOTICE
s。
這是未經測試,但要進入正確的方向:
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if ($errno == E_USER_NOTICE)
die ("Fatal notice");
else
return false; // Leave everything else to PHP's error handling
}
然後,將其設置爲輸入時的功能,並恢復PHP的錯誤處理程序離開時,它使用set_error_handler()
新的自定義錯誤處理程序:
function some_function()
{
// Set your error handler
$old_error_handler = set_error_handler("myErrorHandler");
... do your stuff ....
// Restore old error handler
set_error_handler($old_error_handler);
}
「這是我只需要退出通知只在我的功能,但不是核心的PHP功能,這是全球性的」 –
@Rududo這正是上述做的,不是嗎?什麼不見了? –
他不希望它死在一個php核心E_NOTICE上,但只有一個E_USER_NOTICE由他的函數觸發:) –
您可以使用使用自定義錯誤處理程序set_error_handler()
<?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if ($errno == E_USER_NOTICE) {
die("Died on user notice!! Error: {$errstr} on {$errfile}:{$errline}");
}
return false; //Will trigger PHP's default handler if reaches this point.
}
set_error_handler('myErrorHandler');
trigger_error('This is a E_USER_NOTICE level error.');
echo "This will never be executed.";
?>
Working Example
- 1. 如果讓孩子退出
- 2. PHP退出讓我的代碼工作
- 3. 如何讓退出shell的Python腳本退出?
- 4. 我該如何讓Modelsim以SystemVerilog的指定退出碼退出
- 5. 當主線程退出時,如何讓子線程退出?
- 6. 如何讓我的程序在進入退出後退出
- 7. 如何讓黃瓜退出場景?
- 8. 如何讓WordPress退出開發模式?
- 9. 如何讓dll退出Web引用
- 10. 如何讓用戶退出程序
- 11. 如何退出退出?
- 12. 當jshint發出警告時,如何讓Webpack退出時出錯?
- 13. PHP MVC:如何儘早退出Actions/Controllers?
- 14. 如何在php中退出javascript代碼
- 15. Php-Codeigniter:如何手動退出ajax。
- 16. 如何「跳過」PHP的「退出」命令?
- 17. 如何退出
- 18. 如何讓ANTLR 3.2在第一次出錯時退出?
- 19. 如何退出退出mercurial合併?
- 20. PHP:退出功能
- 21. php Linkedin-api退出
- 22. 如果用戶輸入'N',我該如何讓程序退出?
- 23. 讓PHP輸出
- 24. 如何退出宏
- 25. 如何退出REPL
- 26. 如何退出IFRAME
- 27. 如何退出iframe
- 28. 如何退出NSTimer?
- 29. 如何讓PHP
- 30. 如何讓PHP
爲什麼你需要限制它到你自己的功能?如果一個核心函數拋出一個E_NOTICE,那通常意味着你錯誤地使用它(在你自己的函數中)。所以我認爲你應該想要抓住所有的E_NOTICE。除非使用'trigger_error'手動觸發通知,否則應該觸發E_USER_NOTICE,這很容易區分。 – deceze
我主要考慮讓我的職能退出E_NOTICE,至少其中一些職位。我認爲爲E_USER_NOTICE編寫例外是毫無意義的,因爲在這種情況下,任何程序員的目標都是將這個通知真正投入工作並繼續執行。 – rsk82
「僅在我的函數中發出通知」您是否想要自己[觸發](http://il2.php.net/manual/en/function.trigger-error.php)?或者它們是你的函數中正常的「核心」E_NOTICE? –