Есть ли способ сделать это в 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 }
PHP По умолчанию аргументы функции могут иметь только скалярные или массивные типы:
Значение по умолчанию должно быть константным выражением, а не (например) переменной, членом класса или вызовом функции.
From: PHP Manual / Function Arguments / значения аргумента по умолчанию
Как насчет:
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 }
Вы можете использовать func_num_args и func_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 }