Justin Moh
Justin Moh

Reputation: 1680

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

I think the below is a very standard procedure that everyone had written it a hundred times in any of their applications:

$orderByColumnName = '';
if (isset($this->urlParams()['orderby']) {
    $orderByColumnName = $this->urlParams()['orderby']; 
}

$this->someSortingFunction($orderByColumnName);

I've been doing such way numerous time, I'm feeling sick of it.

There's some kind of like global understanding that suppressing error is evil.
Despite the code can be written so clean by just:

$this->someSortingFunction(@$this->urlParams()['orderby']);

And a ternary shorthand true ?: false; is something close but not useful in this situation because there's no presumed isset check on the condition. Thus we still have to write:

$orderByColumnName = !empty($this->urlParams()['orderby'])?$this->urlParams()['orderby']:'';

So how exactly you guys handle this situation? if all the way? Is there any other smarter way that you could share?

Upvotes: 0

Views: 99

Answers (2)

Shawn Conn
Shawn Conn

Reputation: 431

Why not change how the urlParams() method operates? PHP doesn't have true method overloading, but you can fake it inside the method.

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] : '';
  }
}

Doing this would let you you keep your existing code compatible with $this->urlParams()['some_param']usage while enabling you to refactor everything to $this->urlParams('some_param').

Upvotes: 1

jitendrapurohit
jitendrapurohit

Reputation: 9675

Here is a separate static function which returns NULL if value is not present in an array.

public static function value($key, $list, $default = NULL) {
  if (is_array($list)) {
    return array_key_exists($key, $list) ? $list[$key] : $default;
  }
 return $default;
}

Can call this everytime we need to use empty(), isset(), array_key_exists()

$this->someSortingFunction(value('orderby', $this->urlParams()));

Upvotes: 0

Related Questions