PHP獲取參數(shù)時, 解耦其默認(rèn)值的處理邏輯
2022-10-8 15:18:41 星期六
獲取瀏覽器端傳來的數(shù)據(jù)時, 如果沒有獲取到, 一般會給個默認(rèn)值:
Request::get('test', 'default'); //第二個參數(shù)是默認(rèn)值
但是, 默認(rèn)值只能是一個變量(如上邊代碼第二個參數(shù)), 不能有復(fù)雜的邏輯, 如果想要進(jìn)一步處理, 就需要在獲取參數(shù)后下邊寫代碼處理
想著, 希望有一個專門的類去處理參數(shù)的默認(rèn)值問題, 減少跟主流程代碼的耦合, 這就要求, "default"參數(shù)可支持傳入函數(shù)調(diào)用, 這樣對原來的寫法改動就最少了
如下邊代碼, 在瀏覽器中輸入URL: http://www.test7.com/index.php?a=2
1 // 獲取請求參數(shù)的類 2 class Request 3 { 4 public static function get($field, $default) { 5 if (is_callable($default)) { 6 return $default($_GET[$field]); //這里用到的是PHP的"可變函數(shù)"功能, 變量后邊加上小括號, PHP就會嘗試把變量當(dāng)做函數(shù)去調(diào)用 7 } else { 8 return $default; 9 } 10 } 11 } 12 13 //處理請求數(shù)據(jù)的類 14 class Change 15 { 16 public static function double($v=0) 17 { 18 return $v*$v; 19 } 20 } 21 22 23 echo Request::get('a', function($v){return $v*$v;}); //4 24 echo '<br>'; 25 echo Request::get('a', 'Change::double'); //4 (PHP > 7.0) 26 echo '<br>'; 27 echo Request::get('a', ['Change', 'double']); //4 28 echo '<br>'; 29 echo Request::get('a', [Change::class, 'double']); //4 30 echo '<br>'; 31 echo Request::get('a', 0); //0

浙公網(wǎng)安備 33010602011771號