2

PHPでは、これを行うことができます:

function foo( $var = "bar" ){
    echo $var;
}

foo();         // output : bar

foo("cheese"); // output : cheese

代わりに次のように関数を使用しようとしました:

function foo( $var = get_defined_vars() ){}

解析エラーが返されました:

Parse error: syntax error, unexpected '(', expecting ')'

明らかな答えは、そのように変数を渡すことです

function foo( $var ){
    // do stuff
}

foo( get_defined_vars() );

ただし、関数はオーバーロード可能であり、多くのパラメーターを処理できます。

私は通常、次のような関数を使用します。

foo( $var1, $var2, $var3 ... etc );

ただし、関数の上のスコープから定義された変数が必要です。つまり、渡さなければならない関数をfoo使用するたびに.fooget_defined_vars()

この関数を使用するたびに、次のように呼び出さなければならないのはかなり面倒ですget_defined_vars();

foo( get_defined_vars(), $var1, $var2, $var3 ... etc );

では、これを克服する方法を誰か考えていただけないでしょうか?

私もこれを試しましたが、役に立ちませんでした:

function foo(){
    $args = func_get_args();
    array_unshift( get_defined_vars() );
    call_user_func_array( "bar", $args );
}

function bar(){
    // do stuff
}
4

2 に答える 2

2

いいえ、できません。プロパティの場合と同様に、静的な値と配列のみが許可されます。たとえそうだとしても、それは関数呼び出しを予測できないものにするので、私はそれをお勧めしません。

デフォルト値は、(たとえば)変数、クラスメンバー、または関数呼び出しではなく、定数式である必要があります。

http://php.net/functions.arguments#example-152

于 2012-07-04T09:59:09.773 に答える
0

これらの行に沿って何かを試してください:

function foo( $var1, $var2, $varForDefinedVars=null ){
  if (is_null($varForDefinedVars)){
     $varForDefinedVars = get_defined_vars();
  }
}
于 2012-07-04T10:04:57.983 に答える