2011-11-08 19 views
13

PHPでは、関数を定義するときに、作成できる引数の最大数は何ですか?これは私がやっていることではなく、同僚と議論するときにポップアップした質問です:)PHP関数 - 最大引数数

これは純粋にメモリの制限ですか?効果的に無制限ですか?

+2

なぜテストしないのですか? http://stackoverflow.com/questions/8049673/php-functions-maximum-number-of-arguments/8049856#8049856 – hakre

+0

私は非常に感謝していませんでしたが、代わりに尋ねました。あなたは、このようにして、私たちのすべてが持っているとは限りません。 SOはちょうど再び素敵にコミュニティに仕えました。 –

答えて

9

関数への引数はスタックにプッシュされ、その後関数が呼び出され、スタックが読み込まれ、それらの値がパラメータとして使用されます。

スタックがいっぱいでない限り、パラメータの追加は可能ですが、状況によって異なりますが、設計時にはスタックサイズはわかりません。

しかし、私はこれが純粋な技術的な議論であり、IRLは必要ないと思います。 ;-)

+0

haha​​、いいえ、これはIRLではありません - 純粋に技術的な話題です:-) – bagwaa

11

制限はありません。また、関数定義にすべての引数を書き込まないようにするには、常にfunc_get_args()func_get_arg()およびfunc_num_args()を使用できます。

3

私は本当に何が限界か分かりませんが、多すぎる引数を持つ関数を作成すると、コードがそれほど読みにくくなりません。あなたが作成できる引数の最大数は何か機能を定義するとき

$option = array(
    'arg_1' => 'value', 
    'arg_2' => 'value', 
    .... 
    'arg_x' => 'value' 
); 

function function_name($args = "") 
{ 
    $defaults = array(
     'arg_1' => 'default_value', 
     'arg_2' => 'default_value' 
     .... 
     'arg_x' => 'default_value' 
    ); 

    $arguments = array_merge($defaults, (array)$args); 
    extract($arguments); 

    echo $arg_1; 
    echo $arg_x; 
} 
4

:場合は、あなたがそのような何かを行うことができ、多くの関数の引数を追加したいですか?

引数の数が固定されているとは限りません。クイックテストは、255 555の引数を持つ関数を定義するのに問題はないことを明らかにしました。関数を定義して実行するには、しばらく時間がかかります。しかし、それは動作します。

数字が上がったとき、私は文字列制限である可能性のあるメモリ制限に遭遇していました。テストケースを改善し、バッファを使用してディスクに順番にファイルを保存したい場合は、次のようにします。

$count = 255555; 

$code = 'function test(%s) {return 1;}; return test();'; 

$params = ltrim(implode('=0, $p', range(0, $count)), '0, =').'=0'; 

echo eval(sprintf($code, $params));