PHP获取参数时, 解耦其默认值的处理逻辑
2022-10-8 15:18:41 星期六
获取浏览器端传来的数据时, 如果没有获取到, 一般会给个默认值:
Request::get('test', 'default'); //第二个参数是默认值
但是, 默认值只能是一个变量(如上边代码第二个参数), 不能有复杂的逻辑, 如果想要进一步处理, 就需要在获取参数后下边写代码处理
想着, 希望有一个专门的类去处理参数的默认值问题, 减少跟主流程代码的耦合, 这就要求, "default"参数可支持传入函数调用, 这样对原来的写法改动就最少了
如下边代码, 在浏览器中输入URL: http://www.test7.com/index.php?a=2
1 // 获取请求参数的类 2 class Request 3 { 4 public static function get($field, $default) { 5 if (is_callable($default)) { 6 return $default($_GET[$field]); //这里用到的是PHP的"可变函数"功能, 变量后边加上小括号, PHP就会尝试把变量当做函数去调用 7 } else { 8 return $default; 9 } 10 } 11 } 12 13 //处理请求数据的类 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