我认为下面是一个非常标准的程序,每个人都在他们的任何应用程序中写了一百遍:
$orderByColumnName = '';
if (isset($this->urlParams()['orderby']) {
$orderByColumnName = $this->urlParams()['orderby'];
}
$this->someSortingFunction($orderByColumnName);
我已经这样做了无数次了,我感到厌倦了。有一些类似全局的理解,抑制错误是邪恶的。
尽管只需:
$this->someSortingFunction(@$this->urlParams()['orderby']);
和三元简写的true ?: false;
很接近,但在这种情况下没有用,因为在条件上没有假定的isset检查。因此,我们仍然需要写:
$orderByColumnName = !empty($this->urlParams()['orderby'])?$this->urlParams()['orderby']:'';
那么你们是怎么处理这种情况的呢?一直都是if
?有没有其他更聪明的方法可以分享?
为什么不改变urlParams()
方法的操作方式?PHP没有真正的方法重载,但你可以在方法中实现它。
public function urlParam($param = null) {
//lets assume $internal_array is
//your object's internal array sent through urlParam()
if(is_null($param)) {
return $internal_array;
} else {
return isset($internal_array[$param]) ? $internal_array[$param] : '';
}
}
这样做可以让您保持现有代码与$this->urlParams()['some_param']
使用的兼容性,同时使您能够将所有内容重构为$this->urlParams('some_param')
这里有一个单独的静态函数,如果value不在数组中,则返回NULL
。
public static function value($key, $list, $default = NULL) {
if (is_array($list)) {
return array_key_exists($key, $list) ? $list[$key] : $default;
}
return $default;
}
可以在每次需要使用empty(), isset(), array_key_exists()
$this->someSortingFunction(value('orderby', $this->urlParams()));