我猜測任何仍然返回-1的PHP函數都是因爲傳統原因這樣做的。
對於簡單的函數,其中有一個邏輯上合理的錯誤響應,不涉及返回一個神祕的數字代碼,那麼應該使用它。例如,返回null
,false
或0
可能足以傳達發生的事情。但對於更復雜的功能,特別是那些可能有多種故障模式的功能,可以考慮把它們分解成不同的功能,每個功能處理整個任務的一小部分。
您也可以拋出異常:
function doSomething() {
if (fooFails()) {
throw new Exception('Foo failed to work properly.');
} else if (barFails()) {
throw new Exception('Bar failed this time.');
}
return "blahblah";
}
你也可以繼承的Exception
類,以提供更多的特異性,您可以使用try-catch塊檢測哪一個。總的來說,我認爲最好使用這樣的面向對象的原則。它會產生更清晰和可維護的代碼,特別是在您完全忘記爲什麼按照您的方式編寫代碼後的6個月後。
class FooException extends Exception {
// nothing else needed here
}
class BarException extends Exception {
// nothing else needed here
}
function doSomething() {
if (fooFails()) {
throw new FooException();
} else if (barFails()) {
throw new BarException();
}
return "blahblah";
}
然後你可以使用:
try {
$output = doSomething();
} catch (FooException $e) {
// respond to the FooException case
} catch (BarException $e) {
// respond to the BarException case
} catch (Exception $e) {
// respond to any and all other exceptions that might be thrown
}
「在PHP中設計選擇沒有什麼理由或一致性」 - [這可能不是更真實的](http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design /) – nickb