如果数组键被设置,有没有更简洁的方法来赋值


Is there any cleaner way to assign value if array key isset?

我认为下面是一个非常标准的程序,每个人都在他们的任何应用程序中写了一百遍:

$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()));