ååä»ãå¼æ°ã¨call_user_func_array
å¥ä»¶ã§èª¿æ»ããã¦ãã¦ããµã¨ããã? call_user_func_array() ã«hashé å渡ããããååä»ãå¼æ°çã«ããæãã«å¦çãã¦ããããã¢ãã?ãã£ã¦æã£ãã®ã§ãæ©éå®é¨ã
ååä»ãå¼æ°(PHP8.0ãã)
https://www.php.net/manual/ja/functions.arguments.php#functions.named-arguments
ã¾ãåæã«ãªããä»ã¾ã§ã®ãã³ã¼ãã
<?php declare(strict_types=1); error_reporting(-1); // function test($a, $b, $c) { var_dump($a, $b, $c); } // call_user_func_array('test', ['aaa', 'bbb', 'ccc']);
string(3) "aaa"
string(3) "bbb"
string(3) "ccc"
ããã
ã§ã¯ãã¾ããããªããªãhashé
åã
call_user_func_array('test', ['a' => 'aaa', 'b' => 'bbb', 'c' => 'ccc']);
string(3) "aaa"
string(3) "bbb"
string(3) "ccc"
ã¾ãããã¾ã§ã¯ã
ã¡ãªã¿ã«PHP7.4ç³»ã§åããã¦ãçµæã¯åãã§ããã
次ã«ãé çªãå ¥ãæ¿ããã
call_user_func_array('test', ['b' => 'bbb', 'c' => 'ccc', 'a' => 'aaa']);
string(3) "aaa"
string(3) "bbb"
string(3) "ccc"
ãããäºæ³éãã
ã¡ãªã¿ã«PHP7.4ç³»ã ã¨ä»¥ä¸ã®éãã
string(3) "bbb"
string(3) "ccc"
string(3) "aaa"
ã§ã¯ããããå°ãæå°æªç³»ã
ã¾ãã¯ã追å ã§NGããããã±ã¼ã¹ã
call_user_func_array('test', ['b' => 'bbb', 'c' => 'ccc', 'a' => 'aaa', 'd' => 'ddd']);
Fatal error: Uncaught Error: Unknown named parameter $d in ...
ããã¾ãããã ãããªãçãªã
ã¡ãªPHP7.4ç³»ã ã¨ãã¨ã©ã¼ã¯åºãªãã§åãããã¾ããã©ã¡ã¿ãå¤ãæã«ã(èªä½é¢æ°ã ã¨)ä½ãè¨ã£ã¦ãããªãããããªãâ¦â¦ã
ãããä¸å¿ã足ããªãç³»ãã
call_user_func_array('test', ['b' => 'bbb', 'c' => 'ccc']);
Fatal error: Uncaught ArgumentCountError: test(): Argument #1 ($a) not passed in ...
ã§ï½ãï½ãï½ãï½ã
äºæ³éãã®åãã§ãªã«ããã
ãã£ããã¨æ¸å¿µããªãããã§ã¯ãªããã«ãã¦ããåºæ¬çã«ã¯ãhashã®ã»ãããããããããã±ã¼ã¹ãå¢ãã¦ããããããªããããã???
èå³æ·±ãã£ãã®ã§ãã¡ã¢ããã¦ã
追伸
ãªããå
ã
調æ»ãã¦ãã¦æå¾
ãã¦ãããphpunitã®dataProviderãã§ã¯ä½¿ãã¾ããã§ãã orz
array_values() ã¨ããã£ã¦ãæããªãããªã?(ãªãããããªé°å²æ°ã®æå)