你如何驗證/管理你的PHP方法參數,你爲什麼這樣做?你如何執行你的PHP方法參數?
2
A
回答
16
好吧,假設你在談論的類型檢測方法的參數,這取決於:
如果它預期的目標,我用type-hinting與接口:
public function foo(iBar $bar)
如果期望只有一個數組,我使用
array
關鍵字的類型提示。public function foo(array $bar)
如果它是期待一個字符串,整數,布爾或浮動,我投它:
public function foo($bar) { $bar = (int) $bar; }
如果它希望混合,我只是檢查級聯:
public function foo($bar) { if (is_string($bar)) { //handle string case } elseif (is_array($bar)) { //... } else { throw new InvalidArgumentException("invalid type"); } }
最後,如果期待可迭代類型,我不使用type-hinting。我檢查,如果它首先是一個數組,然後重新裝入迭代器:如果它期待一個文件名或目錄
public function foo($bar) { if (is_array($bar)) { $bar = new ArrayIterator($bar); } if (!$bar instanceof Traversable) { throw new InvalidArgumentException("Not an Iterator"); } }
,只是
is_file
確認:public function foo($bar) { if (!is_file($bar)) { throw new InvalidArgumentException("File doesn't exist"); } }
我認爲,處理大多數情況。如果你想到其他人,我會很樂意嘗試回答他們...
2
Typechecking是你應該在開發階段,而不是在生產階段。所以適當的句法特徵是:
function xyz($a, $b) {
assert(is_array($a));
assert(is_scalar($b));
但是我會盡量避免它,或者使用類型強制優先。動態類型的PHP可以很好地適應不同的值。只有少數地方想要調整基本語言行爲。
相關問題
- 1. 你如何執行java
- 2. 你如何運行你不知道參數開始的程序?
- 3. 在Java中,你如何執行Stack.pop()作爲參數?
- 4. 如何執行方法的unicode參數?
- 5. 你如何使用方法參數CCMenuitem的選擇
- 6. 你如何讓PHP
- 7. 你如何讓你的提交登錄按鈕帶你到你的PHP頁面?
- 8. 你如何執行silverlight類庫?
- 9. 你將如何執行偏離規則?
- 10. 你如何執行強密碼?
- 11. 你如何在Eclipse中執行程序?
- 12. 你如何執行外部程序?
- 13. 你如何比較你從方法中調用的每個值?
- 14. PHP:你如何從構造函數調用方法?
- 15. 你怎麼知道你的mysql命令何時執行?
- 16. 你如何記錄你的PHP函數和類內聯?
- 17. 你如何確定你正在運行最新的可執行文件?
- 18. 你如何記錄函數參數?
- 19. PHP pThreads - 你如何執行垃圾收集?
- 20. 你將如何使用facebook php sdk執行`debug_token`調用?
- 21. 你如何在PHP中執行Redis事務?
- 22. php PDO - 你綁定所有參數嗎?
- 23. 無方法 '迷你'
- 24. 你如何創建參數分佈?
- 25. diffstrings.py:你如何指定路徑參數?
- 26. 你如何將參數傳遞給#to_xml?
- 27. 你如何從參數jquery回調Dart?
- 28. 你如何使用Seam頁面參數?
- 29. 你如何委派類方法?
- 30. 你如何從方法中返回?
「執行」是什麼意思?你是在談論類型提示(http://php.net/manual/en/language.oop5.typehinting.php)? – svens 2011-01-11 17:23:37
我認爲你的意思是_validate_。 – SLaks 2011-01-11 17:23:48
你是什麼意思? – 2011-01-11 17:23:56