具有自動變量聲明的其他語言 - 比如Perl - 具有嚴格的模式。PHP中的嚴格模式?
通過激活這種嚴格模式,變量聲明是必需的,只要您嘗試使用未聲明的變量,Perl就會拋出錯誤。
PHP提供任何類似的功能嗎?
具有自動變量聲明的其他語言 - 比如Perl - 具有嚴格的模式。PHP中的嚴格模式?
通過激活這種嚴格模式,變量聲明是必需的,只要您嘗試使用未聲明的變量,Perl就會拋出錯誤。
PHP提供任何類似的功能嗎?
的種類。您可以激活error reporting中的E_NOTICE
級別。 (常量列表here。)
每個使用未聲明變量的實例都將引發一個E_NOTICE
。
E_STRICT
錯誤livel也會拋出這些通知,以及其他關於如何優化代碼的提示。
error_reporting(E_STRICT);
終止腳本
如果你真的很嚴重,希望你的腳本終止而不是遇到一個未聲明的變量時,只是輸出的通知,你可以建立一個custom error handler。
,在他們只處理與「未定義的變量」的告示,並傳遞到默認的PHP錯誤處理一切工作例如:
<?php
error_reporting(E_STRICT);
function terminate_missing_variables($errno, $errstr, $errfile, $errline)
{
if (($errno == E_NOTICE) and (strstr($errstr, "Undefined variable")))
die ("$errstr in $errfile line $errline");
return false; // Let the PHP error handler handle all the rest
}
$old_error_handler = set_error_handler("terminate_missing_variables");
echo $test; // Will throw custom error
xxxx(); // Will throw standard PHP error
?>
是的,在腳本的開頭鍵入error_reporting(E_STRICT|E_ALL);
。
只有在使用PHP 5.4.0之前,您需要明確指定'E_STRICT'。請參閱http://php.net/manual/en/function.error-reporting.php,其中'E_STRICT'自5.4.0起成爲'E_ALL'的一部分。 – Roland 2017-10-27 13:01:16
只有一半回答。請參閱其他答案。 – Roland 2017-10-27 13:02:01
PHP 爲警告大約在默認情況下未聲明的變量,你只需要要打開error reporting級別,以便您可以看到通知。請注意,由於沒有特別的語法來聲明PHP中的變量,並且只需通過分配給它來聲明一個變量,它只能在您嘗試時使用未聲明的變量的值來警告您。與其他語言相反,「未聲明的變量賦值」不存在,所以PHP無法在那裏提醒你。
使用
error_reporting(E_ALL);
在你的PHP代碼的開始。 或在您的php.ini文件中設置error_reporting設置,爲所有PHP文件設置它
您可以檢查error_reporting
,並且不要忘記設置display_errors
以及。 請注意,有多個級別的錯誤報告。
您可以set_error_handler()
實現自己的錯誤處理功能。
然後,您可以根據需要對某些錯誤級別做出反應。
例如,如果未正確聲明變量或遇到任何不滿意的情況,您可以終止腳本,而不是僅顯示和記錄錯誤消息。
這樣,您可以對在PHP解釋器實例上運行的任何代碼執行非常嚴格的策略。
我建議報告和處理錯誤的要求在您的開發環境和現場生產環境(WWW,公司內聯網等)中有所不同。在開發過程中,您會希望儘可能詳細地查看和修復問題。
在現場環境中,我認爲不是想向用戶顯示PHP錯誤消息,而是允許腳本繼續使用減少的功能(例如,「很抱歉,我們無法更新您的配置文件時刻「,或將用戶重定向到主頁等)。一個方法來實現這一點將通過使用自定義錯誤處理程序爲每個環境
我在測試/開發階段實現了Pekkas代碼。 – jantimon 2010-07-07 13:27:26
幾年後,PHP已獲得declare(strict_types = 1);
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.strict
由於版本7 [PHP確實支持嚴格模式](http://php.net/manual/en/migration70.new-features.php),只是把'聲明(strict_types = 1); '在每個(和每個)腳本文件的頂部,在命名空間聲明之前。 – Code4R7 2017-05-23 09:05:57
@ Code4R7這是一種不同的嚴格模式,然後在問題中詢問。 – Flimm 2017-07-03 16:59:58
是的。恢復爲'error_reporting(E_STRICT);'。 – Code4R7 2017-07-04 09:03:03