3

PHPでこれを行う方法はありますか?

//in a class
public static function myFunc($x = function($arg) { return 42+$arg; }) {
   return $x(8); //return 50 if default func is passed in
}
4

2 に答える 2

8

PHPのデフォルトの関数引数は、スカラー型または配列型のみにすることができます。

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

差出人: PHPマニュアル/関数の引数/デフォルトの引数値

どうですか:

public static function myFunc($x = null) {

    if (null === $x) {
        $x = function($arg) { return 42 + $arg; };
    }

    return $x(8); //return 50 if default func is passed in
}
于 2012-10-11T03:34:48.123 に答える
3

func_num_argsfunc_get_argを使用できます

//in a class 
public static function myFunc() { 
    if (func_num_args() >= 1) {
        $x = func_get_arg(0);
    } else {
        $x = function($arg) { return 42+$arg; }
    }
    return $x(8); //return 50 if default func is passed in 
} 

しかし、私は、データを次のように処理できるというtradyblixに同意します。

//in a class 
public static function myFunc() { 
    if (func_num_args() >= 1) {
        $x = func_get_arg(0);
        $retval = $x(8);
    } else {
        $retval = 42 + 8;
    }
    return $retval; //return 50 if default func is passed in 
} 
于 2012-10-11T03:35:04.050 に答える