2012-10-27 52 views
1

在PHP中編寫函數時,應該如何廣泛地檢查和驗證參數中的數據?PHP函數,檢查參數數據類型和有效值?

例如,如果我期望一個參數是一個布爾值,我應該這樣做嗎?
或者檢查參數類型是否爲布爾值,如果不返回FALSE?

我不特別喜歡從函數返回FALSE的想法,只是因爲參數無效,除非函數(urrg)的函數要驗證某些數據。因爲它可以掩蓋函數的實際結果,如果它設計爲無論如何返回TRUE/FALSE。

如果該函數生成的PHP錯誤是由於提供了無效數據而導致的,那麼對於開發人員來說,這種方式比返回FALSE或返回空字符串更有用。這樣他們知道他們的輸入數據(因此可能使用該函數)是無效的/不正確的,而不是函數內的測試返回FALSE而不是TRUE。

如果數據無效,我可以隨時檢查進入該功能的數據和trigger_error()。但是在多大程度上這是必要的?

+0

PHP本質上是鬆散類型的。你必須與系統作鬥爭來強制打字。也就是說,這也取決於數據來自何處。如果你正在製作某種Ajax API,你可能希望儘可能早地拋出一個有意義的異常,而不是等待某些東西在作品中更深入地打破,並返回一個深奧的錯誤。 –

+0

如果你正在積極地對付弱打字,那麼你可能會用錯誤的語言開始。通常可以使用'assert()'裝飾,除非您的應用程序流和行爲不穩定,您可能會在部署後仍然收到無效類型。如果在開發過程中無法獲得它,請使用execeptions。 – mario

+0

噢,絕對我知道PHP的鬆散類型的本質。事實上,這就是它使用這種簡單的語言的原因。但是我想知道是否應該在進入函數時測試參數的值和類型。目前,我傾向於僅僅依靠開發人員(我)明智地認識到,如果該功能出現錯誤,他們需要確保他們正確使用它。現在只有我使用這些功能,但如果有人想要使用它們呢? – batfastad

回答

1

PHP不是一種強類型語言,因此變量是鬆散類型的。對於數組和對象,您可以在函數調用中使用type hinting,並讓PHP處理錯誤類型的錯誤。

有一個rumour在下一個版本的PHP中,還將爲原始類型(標量)鍵入提示支持。當這成爲現實時,你的問題就解決了。

現在,你必須自己處理這個問題,它取決於你如何處理它們。如果提供的類型存在嚴重錯誤,請考慮拋出異常。

我認爲這是壞的設計,當出現問題時返回false。函數應該有一個清晰的結果。

+0

是的,我明白寬鬆的打字和類型暗示。 – batfastad

1

正如阿薩德所說,這取決於你正在開發的是誰,你想要走多遠。拋出argumentInvalidExceptions根本不是一個壞主意,通常用在其他語言中。

當行爲出乎意料時,我更喜歡使用明顯的自解釋參數名稱(而不是i或x),函數名稱和phpdoc。此外,由於PHP 5.1,你可以使用類型化的參數來檢查你(只適用於類,接口和數組)。

我建議外部數據(用戶輸入,文件,網絡等)總是經過驗證。