可変数の引数(func_num_args()
とfunc_get_args()
を使用)を使用するPHP関数がありますが、関数を渡す引数の数は、関数の長さによって異なります。アレイ。 への道はありますか?さまざまな引数を持つPHP関数を呼び出しますか?PHP関数に可変数の引数を渡す方法
答えて
引数を配列に持つ場合は、call_user_func_array
関数を使用します。
渡す引数の数が配列の長さによって異なる場合は、おそらく配列自体にパックすることができ、それをcall_user_func_array
の2番目のパラメータに使用することを意味します。
あなたが渡した配列の要素は、関数によって別個のパラメータとして受け取られます。例えば
あなたはこの機能を持っている場合、:
$params = array(
10,
'glop',
'test',
);
そして、それから、関数を呼び出す:
function test() {
var_dump(func_num_args());
var_dump(func_get_args());
}
をあなたはこのように、配列の中にあなたのパラメータをパックすることができます
call_user_func_array('test', $params);
このコードは出力されます:
int 3
array
0 => int 10
1 => string 'glop' (length=4)
2 => string 'test' (length=4)
つまり3つのパラメータ。関数がこのように呼び出されたのとまったく同じです。
test(10, 'glop', 'test');
はい、ありがとうございます。 call_user_func_array()は、私が探していた関数です。 – nohat
オブジェクトメソッド呼び出しでcall_user_func_array()を使用できますか? – nohat
@nohat:歓迎します:-) ;;オブジェクトのメソッドを使うことについて:はい、最初のパラメータとしてarray($ obj、 'methodName')のようなものを使用できます。実際には、その関数に必要な "コールバック"を渡すことができます。コールバックの詳細については、http://php.net/callback#language.types.callbackを参照してください。 –
これを呼び出すことができます。
function test(){
print_r(func_get_args());
}
test("blah");
test("blah","blah");
出力:
アレイ([0] =>何とか)アレイ([0] =>何とか[1] =>何とか)これを行う方法をお探しの方に
OPが正しく理解されていれば、問題はパラメータを受け取っていませんが、**可変番号パラメータの –
私は正しくOPを理解していませんでした。配列は確かに行く方法だろう。次に、彼は配列をtest()に直接渡すことができますか? –
配列を渡すことも解決策になるかもしれません - 私が正しく理解していれば^^ –
$object->method
で:
call_user_func_array(array($object, 'method_name'), $array);
私は、変数パラメータと変数METHOD_NAMEを呼び出す構文機能でこれに成功しました。
これは(もいくつかの言語でのスプラット事業者として知られている)...演算子を使用して、今possible with PHP 5.6.xです:
例:ここでは
function addDateIntervalsToDateTime(DateTime $dt, DateInterval ...$intervals)
{
foreach ($intervals as $interval) {
$dt->add($interval);
}
return $dt;
}
addDateIntervaslToDateTime(new DateTime, new DateInterval('P1D'),
new DateInterval('P4D'), new DateInterval('P10D'));
は
__invokeマジックメソッドを使用してソリューションです(php5以降で利用可能です。3)同じクラスの内側から
class Foo {
public function __invoke($method=null, $args=[]){
if($method){
return call_user_func_array([$this, $method], $args);
}
return false;
}
public function methodName($arg1, $arg2, $arg3){
}
}
:オブジェクトのインスタンスから
$this('methodName', ['arg1', 'arg2', 'arg3']);
:
$obj = new Foo;
$obj('methodName', ['arg1', 'arg2', 'arg3'])
古い質問は、私が知っている、しかし、ここでの回答のどれもが本当に単に質問に答えるのは良い仕事をしません:
ので、これを使って、あなたが渡すすべてのパラメータを取得することができます。
私はPHPで遊んとソリューションは次のようになります。
function myFunction($requiredArgument, $optionalArgument = "default"){
echo $requiredArgument . $optionalArgument;
}
この関数は二つのことを行うことができます。そののみ必要なパラメータで呼ばれた場合
を:myFunction("Hi")
それは "印刷しますこんにちはデフォルト "
しかし、オプションのパラメータで呼び出された場合:myFunction("Hi","me")
" Hi me "と表示されます。
これは、この道を探している人に役立つことを願っています。
PHP 5.6以降、可変引数リストは...
演算子で指定できます。
function do_something($first, ...$all_the_others)
{
var_dump($first);
var_dump($all_the_others);
}
do_something('this goes in first', 2, 3, 4, 5);
#> string(18) "this goes in first"
#>
#> array(4) {
#> [0]=>
#> int(2)
#> [1]=>
#> int(3)
#> [2]=>
#> int(4)
#> [3]=>
#> int(5)
#> }
あなたが見ることができるように、...
オペレータは、アレイ内の引数の変数リストを収集します。
可変引数を別の関数に渡す必要がある場合は、...
は依然として役に立ちます。
function do_something($first, ...$all_the_others)
{
do_something_else($first, ...$all_the_others);
// Which is translated to:
// do_something_else('this goes in first', 2, 3, 4, 5);
}
PHP 7以来、引数の変数リストは、あまりにも同じタイプのすべてのことを強制することができます。
function do_something($first, int ...$all_the_others) { /**/ }
これは受け入れられる回答である必要があります。 –
は、私は驚い誰もがここで簡単に渡すとextractが配列をINGの言及していませんよ。例:
function add($arr){
extract($arr, EXTR_REFS);
return $one+$two;
}
$one = 1;
$two = 2;
echo add(compact('one', 'two')); // 3
もちろん、これはargument validationを提供しません。そのために は、誰もが私の期待する機能を使用することができます。https://gist.github.com/iautomation/8063fc78e9508ed427d5
- 1. PHPの関数に引数を渡す
- 2. rの関数内で関数に引数を渡す方法
- 3. 可変引数関数をマクロに変換する方法は?
- 4. PHP関数の引数で変数を使用する方法?
- 5. 可変引数を持つ関数に関数ポインタを渡すには?
- 6. Laravel Policies - 複数の引数を関数に渡す方法
- 7. 複数の引数を適用関数に渡す方法
- 8. 可変数の関数引数Lua 5.1
- 9. 関数ポインタに渡すパラメータの可変数のPHP構文
- 10. 関数の外に渡す変数PHP
- 11. Rのdo.callの関数引数に余分な引数を渡す方法
- 12. javascript関数にphp変数を渡すエラー:missing)引数リストの後
- 13. バッチスクリプト内の関数に引数(コマンドライン引数ではない)を渡す方法
- 14. 可変引数リストをsprintf()に渡す
- 15. Bootstrapのmodal.show()関数に値の引数を渡す方法
- 16. 関数にオプションのマクロ引数を渡す方法
- 17. C++の関数引数の可変量
- 18. javascript関数でPHP変数を渡す
- 19. 可変引数を持つ関数ランタイムエラー
- 20. PHP変数をJavascript関数に渡す関数
- 21. PhoneGapデータベーストランザクション関数に引数を渡す方法
- 22. 可変個引数可変引数テンプレートテンプレート
- 23. PHP関数の可変変数
- 24. 引数を関数に渡す
- 25. 関数で引数を渡すには?
- 26. PHPコーディングスタイル関数と渡す変数
- 27. 抽象関数と可変引数リスト
- 28. Cで関数の引数としてENUMを渡す方法
- 29. 引数をオブジェクトの正しいコンストラクタに渡す引数の数を可変にしてテンプレート関数を作成する方法はありますか?
- 30. ラッパー関数内のオプションの引数をサブ関数に渡す
新しいphp5.6でスプラットオペレータについて学ぶために私の答えをチェックしてください:http://stackoverflow.com/a/23163963/1090562 –