PHPの関数にPythonでいうキーワード引数を試みる。
おはようございます、こんにちわ、こんばんわ、阿部です。
日曜日の昼、如何お過ごしですか。
僕は、一杯やりながらコードを書いてます。
ってなわけで本題です。
・Python
In [1]: def hoge(a=1, b=2, c=3): ...: return a, b, c In [2]: print hoge() ------> print(hoge()) (1, 2, 3) In [3]: print hoge(c=5) ------> print(hoge(c=5)) (1, 2, 5)
便利ですね。デフォルト引数を指定したやつのみ指定出来るってわけです。
■PHPで普通にやろうとすると、、
・PHP
function hoge($a=1, $b=2, $c=3){ return $a." ".$b." ".$c; } print hoge($c="5"); // 5 2 3
ってなっちゃうわけです。普通に第一引数目に5が入るだけ。
んで、なんとか出来ないか色々試したけど、結論から言うと、出来ないっぽいですね。
func_get_argsとか使って色々試してみたけど、出来なかったっす。
(僕の知識不足、技量不足なだけかもしれないんで、もしやり方をご存知の方は教えて欲しいっす。)
■仕方ないから、代わりにeval使ってやってみました。
・PHP
<?php function hoge($arr=array()){ // デフォルト引数指定 $a = 1; $b = 2; $c = 3; // 配列を分解してevalでキーを変数として格納 if(is_array($arr)){ foreach($arr as $key => $value){ if(!empty($key) && !is_numeric($key)){ eval("$$key = $value;"); // 「$c = 5」とかやってます } } } return $a." ".$b." ".$c."\n"; } $arg1 = array(); print hoge($arg1); // 1 2 3 $arg2['c'] = 5; print hoge($arg2); // 1 2 5 $arg3['a'] = 3; $arg3['b'] = 4; print hoge($arg3); // 3 4 3 $arg4['d'] = 5; print hoge($arg4); // 1 2 3
自分としては、要件満たしてるしこれでいいかなと、、、
なんか他にいいのあったら教えてください!!!!!!!