對于初學者而言,可能很難理解為什么某些做法更安全,
但是,以下一些技巧可能超出了 PHP 的范圍,
始終使用大括號
讓我們看下面的代碼:
if (isset($condition) && true === $condition)
echo 'this is a success';
雖然正確,但是你再看看下面的代碼
if (isset($condition) && true === $condition)
foreach (range("A", "Z") as $letter)
echo $letter . PHP_EOL;
echo 'this is a success';
依舊正確,但是 this is a success 最終只 echo 了一次,這可能是一個陷阱,
等等,我們在來看看將 $condition = false; 寫在判斷之前會發生什么
$condition = false;
if (isset($condition) && true === $condition)
foreach (range("A", "Z") as $letter)
echo $letter . PHP_EOL;
echo 'this is a success';
該程式依舊成功列印 this is a success,
這顯然不是我們想要的結果,你現在知道為什么花括號很重要了吧?
省略括號通常會導致不良的副作用,此外,閱讀代碼要困難得多,所以應當將其改寫成這樣
$condition = false;
if (isset($condition) && true === $condition) {
foreach (range("A", "Z") as $letter) {
echo $letter . PHP_EOL;
}
echo 'this is a success';
}
跳過 else 部分
在使用任何變數之前,最好對它進行初始化,考慮以下例子:
if (isset($condition) && true === $condition) {
$main = 'chocolate';
} else {
$main = 'vanilla';
}
如果你認為上面例子 OK 的話,那么試著添加幾個 elseif 條件看看
if ($condition) {
$main = 'chocolate';
$time = 2;
} elseif($otherCondition)) {
$main = 'strawberry';
$time = 3;
} elseif($otherOtherCondition)) {
$main = 'apple';
$time = 1;
} else {
$main = 'vanilla';
$time = 9;
}
該代碼顯得很笨重,當你在 elseif 代碼塊中添加邏輯時你可能會忘記一些變數,
試著這樣做:
$main = 'vanilla';
$time = 9;
if ($condition) {
$main = 'chocolate';
$time = 2;
} elseif($otherCondition)) {
$main = 'strawberry';
$time = 3;
} elseif($otherOtherCondition)) {
$main = 'apple';
$time = 1;
}
這種方式,每個人都知道 $main 和 $time 變數在接下來的代碼中應該被定義,該代碼似乎更具可讀性,
這種方式,每個人都知道 $main 和 $time 變數在接下來的代碼中應該被定義,該代碼似乎更具可讀性,
不要使用 @運算子
在 PHP 中 @是一個錯誤控制運算子,它用于隱藏錯誤,但事實上沒人希望如此,
相反,你應當試著捕獲這些錯誤并使用錯誤日志記錄,
@運算子有著極大的缺點,比如將任何除錯變為噩夢或使代碼運行更慢!
對于代碼的每次運行,它都會呼叫 INI 設定以將 error_reporting 設為 0,并在這之后將其設回原始值,
它是如此耗費資源,我覺得完全不使用它才是更為安全的,
一些關于三元運算子的想法
雖然三元運算子可能很方便,但代碼有可能更加難以閱讀,
不要過度使用三元運算子
三元運算可用于簡化 if-else 部分:
$main = ($condition) ? "chocolate" : "vanilla";
含義如下:
if ($condition) {
$main = "chocolate";
} else {
$main = "vanilla";
}
上面的例子是 ok 的,但我已經看到過如下的例子:
$output = ($condition) ? ($otherCondition) ? 'ok' : 'ko' : 'unknown';
不建議鏈式或嵌套式地使用三元運算,
謹慎使用『Elvis』運算子
Elvis 運算子是一個特殊的運算子,
$foo = $bar ?: "baz";
以上是指:
$foo = $bar ? $bar : "baz";
可以這樣寫:
if ($bar) {
$foo = $bar;
} else {
$foo = "baz";
}
信不信由你,正如維基百科所說:
“Elvis 運算子” 這個名字指的是這樣一個事實:當它的符號?: 從側面看時,就像是 埃爾維斯?普雷斯利 (Elvis Presley) 的一個表情符號和他的卷發,
請小心使用空合并運算子
自從 PHP7 起,null 合并運算子 可以用了:
需要將三元運算子與 isset() 結合使用的常見情況的語法,
因此:
$result = isset($_GET['result']) ? $_GET['result'] : "default";
可以這樣寫:
$result = $_GET['result'] ?? "default";
在嘗試使用空合并運算子替換 ternaries 和 Elvis 運算子時要格外小心!
空合并運算子從不檢查條件是否為真,而是檢查您的 var 是否已設定而不為空 ( isset() 的概念),
綜上
我希望你喜歡這些編程技巧,我想說的最后一件事是:請不要為了簡潔而犧牲了清晰度,
更多內容請訪問
怎么從一名碼農成為架構師的必看知識點:目錄大全(持續更新)50W年薪挑戰!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/73401.html
標籤:PHP
上一篇:H5頁面喚起支付寶實作支付功能
