PHPでRubyのようなキーワード引数はできますでしょうか？


Rubyでは引数の順序を気にしないで、  
下記のように書くことができます。  
これをキーワード引数というそうです。

[code]

    def self.piyo(msg: 'hello', name: 'Yamada')
      p "#{msg}, #{name}"
    end
    
[/code]

[code]

    Hoge.piyo #=>"hello, Yamada"
    Hoge.piyo(msg: 'Hi', name: 'Sato') #=> "Hi, Sato"
    Hoge.piyo( name: 'Sato', msg: 'Hi') #=> "Hi, Sato"
    
[/code]

そこで質問なのですが、PHPではこの機能はありますでしょうか？  
ご存知の方がいらっしゃいましたら、教えて頂けると幸いです。

コードは↓を参考にしています。  
<http://qiita.com/rtoya/items/33617078501776fdcad7>

よろしくお願いします。




PHPでは、[キーワード引数を言語に加えるという提案](https://wiki.php.net/rfc/named_params)がありますが、キーワード引数は今のまま[不可能](https://stackoverflow.com/questions/6800379/named-
arguments-in-php)です。

しかし、配列を使えます。例えば：

[code]

    function piyo($args) {
      // 初期値を足す
      $args += array(
        'msg' => 'hello',
        'name' => 'Yamada'
      );
    
      echo("$args[msg], $args[name]");
    }
    
    piyo(array('msg' => 'Hi', 'name' => 'Sato')); // => "Hi, Sato"
    piyo(array('name' => 'Sato', 'msg' => 'Hi')); // => "Hi, Sato"
    
[/code]

PHP5.4では、`piyo(['msg' => 'Hi', 'name' => 'Sato']);`というシンタックスも使えます。

* * *

補足：JavaScriptのFunction.applyのように、[`call_user_func_array`](http://php.net/manual/ja/function.call-
user-func-array.php)も使えるようです。例えば：

[code]

    function piyo($msg = 'hello', $name = 'Yamada') {
      echo("$msg, $name");
    }
    
    // => "Hi, Sato"
    call_user_func_array(
      'piyo', array('msg' => 'Hi', 'name' => 'Sato')
    ); 
    // => "Hi, Sato"
    call_user_func_array(
      'piyo', array('name' => 'Sato', 'msg' => 'Hi')
    );
    
[/code]

この[SOの回答](https://stackoverflow.com/a/29282838)のように、[`extract`](http://php.net/manual/ja/function.extract.php)も使えるようです：

[code]

    function piyo($args = array(), $msg = 'hello', $name = 'Yamada') {
      extract($args);
      echo("$msg, $name");
    }
    
    piyo(array('msg' => 'Hi', 'name' => 'Sato')); // => "Hi, Sato"
    piyo(array('name' => 'Sato', 'msg' => 'Hi')); // => "Hi, Sato"
    
[/code]




PHPでは、[キーワード引数を言語に加えるという提案](https://wiki.php.net/rfc/named_params)がありますが、キーワード引数は今のまま[不可能](https://stackoverflow.com/questions/6800379/named-
arguments-in-php)です。

しかし、配列を使えます。例えば：

[code]

    function piyo($args) {
      // 初期値を足す
      $args += array(
        'msg' => 'hello',
        'name' => 'Yamada'
      );
    
      echo("$args[msg], $args[name]");
    }
    
    piyo(array('msg' => 'Hi', 'name' => 'Sato')); // => "Hi, Sato"
    piyo(array('name' => 'Sato', 'msg' => 'Hi')); // => "Hi, Sato"
    
[/code]

PHP5.4では、`piyo(['msg' => 'Hi', 'name' => 'Sato']);`というシンタックスも使えます。

* * *

補足：JavaScriptのFunction.applyのように、[`call_user_func_array`](http://php.net/manual/ja/function.call-
user-func-array.php)も使えるようです。例えば：

[code]

    function piyo($msg = 'hello', $name = 'Yamada') {
      echo("$msg, $name");
    }
    
    // => "Hi, Sato"
    call_user_func_array(
      'piyo', array('msg' => 'Hi', 'name' => 'Sato')
    ); 
    // => "Hi, Sato"
    call_user_func_array(
      'piyo', array('name' => 'Sato', 'msg' => 'Hi')
    );
    
[/code]

この[SOの回答](https://stackoverflow.com/a/29282838)のように、[`extract`](http://php.net/manual/ja/function.extract.php)も使えるようです：

[code]

    function piyo($args = array(), $msg = 'hello', $name = 'Yamada') {
      extract($args);
      echo("$msg, $name");
    }
    
    piyo(array('msg' => 'Hi', 'name' => 'Sato')); // => "Hi, Sato"
    piyo(array('name' => 'Sato', 'msg' => 'Hi')); // => "Hi, Sato"
    
[/code]

