15171


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>

よろしくお願いします。


CC BY-SA 3.0
2015-09-03T01:49:29.683
15166
2015-09-03T03:16:05.837
2015-09-03T02:22:08.857
7918
7918
question
php ruby 可読性
PHPでRubyのようなキーワード引数はできますでしょうか？


今のところ配列かオブジェクトで擬似的に表現するしかないかもですね。

[code]

    function piyo($k) {
        echo $k['msg'] . ", " . $k['name'];
    }
    piyo(['msg' => 'hello', 'name' => 'Yamada']);
    
[/code]


CC BY-SA 3.0
2015-09-03T02:27:57.463
15169
2015-09-03T02:27:57.463
2232
15166
answer


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]


CC BY-SA 3.0
2015-09-03T02:34:42.947
15171
2015-09-03T03:16:05.837
2017-05-23T12:38:56.467
-1
11003
15166
answer