「?:演算子」使える場面だってあるさ!

そろそろそろそろ「?:演算子」について一言言っておくかに一言言っておくか

最近、配列で利用する可能性のあるキーすべてをとりあえず初期化するようにしている。

<?php
$_GET += array(
  'user_id'=>null,
  'enable_hoge'=>false,
  'name'=>'nobody'
);
?>

なので、

<?php
$user_id = $_GET['user_id'] ? : 'anonymous';

だがちょっと待って欲しい。それなら最初から

<?php
$_GET += array(
  'user_id'=>'anonymous',
  'enable_hoge'=>false,
  'name'=>'nobody'
);
?>

でいいじゃないか、と思った。
でも、こういうのもありうる。

<?php
class Foo {
  protected $cfg = array();
  
  public function __construct(array $config = array())
  {
    $config += array(
      'user_id'=>'anonymous',
      'enable_hoge'=>false,
      'name'=>'nobody'
      );
    $this->cfg = $config;
  }

  public function setConfig($key, $value)
  {
    $cfg[$key] = $value;
  }

  public function getUserId()
  {
    $user_id = $cfg['user_id'] :? 'anonymous';
    
    return $cfg['user_id'] :? 'anonymous';
  }
}

$foo = new Foo(array('user_id'=>'hoge');
echo $foo->getUserID(), PHP_EOL;
$foo->setConfig('user_id', null);
echo $foo->getUserID(), PHP_EOL;

/*
result:
hoge
anonymous
*/
?>