有沒有辦法在PHP中做到這一點?作爲默認參數的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中做到這一點?作爲默認參數的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/Default argument values
如何:
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
}
答案接受,因爲鏈接到PHP手冊,其中說:「默認值必須是一個常量表達式,而不是(例如)變量,類成員或函數調用。」謝謝。我早些時候有過這樣的事情,我希望有一個語言功能。猜不= =( – Arcymag
我也建議在函數簽名中聲明'$ x'的類型,因爲傳入一個字符串會導致發生$ x(8)'時發生錯誤,我個人會聲明類型爲'Closure'確保它是一個匿名函數,但'callable'也可以工作並且更靈活一些(並且容易出錯)。所以'myFunc(Closure $ x = null)'或'myFunc(callable $ x = null )',如果你嘗試過'myFunc(「test」),那麼要麼會拋出一個可捕獲的致命錯誤;'如果這個類型沒有被聲明,那麼會出現一個不可捕獲的致命錯誤 – Anthony
您可以使用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
}
不知道func_num_args和func_get_arg。慶典。 – Arcymag
請問爲什麼要這樣做? – tradyblix
好吧,我有一個通用的實用函數,它將匿名函數作爲參數(具體來說,它根據某些規則將函數中的各種對象轉換爲各種數組)。我想要一個默認操作。那是過分的要求? = x – Arcymag
編號默認參數只能是常數值,不能是表達式,也不能是對象。 – mario