2009-11-07 38 views
5

想我再也以下功能:我可以在PHP中使用運算符作爲函數回調嗎?

function mul() 
{ 
    return array_reduce(func_get_args(), '*'); 
} 

是可以使用*運算符的回調函數?有沒有其他方法?

+1

至少。有用。題。名稱。永遠。 ;) – 2009-11-07 10:22:41

+0

固定標題,隨意恢復,如果你不喜歡它 – 2009-11-07 10:51:46

回答

8

在這種特定的情況下,使用array_product()

function mul() { 
    return array_product(func_get_args()); 
} 

在一般情況下?不,您不能將運算符作爲回調函數傳遞給函數。您至少必須將其包裝在一個函數中:

function mul() { 
    return array_reduce(func_get_args(), 'mult', 1); 
} 

function mult($a, $b) { 
    return $a * $b; 
} 
+0

不錯的一個,我從來沒有見過這個功能,想知道這是一個常見的操作,我從來沒有機會使用它 – RageZ 2009-11-07 10:30:10

5

您提供的代碼不起作用,但您可以執行類似操作。

function mul() 
{ 
    return array_reduce(func_get_args(), create_function('$a,$b', 'return "$a * $b')); 
} 

create_function允許您創建簡短的函數(一個襯墊),如果你的函數越來越長則一個聲明,最好創建一個真正的函數來完成這項工作。

請注意,單引號是重要的,因爲您使用的是美元符號,因此您不希望PHP嘗試替換它們。

1

如果我定義函數,然後做到這一點:

 
$arr = array(2,3,4,5,6); 
mul($arr); 

我得到以下警告:

 
Warning: array_reduce(): The second argument, '*', should be a valid callback in /home/azanar/Documents/Projects/testbed/test.php on line 6 

其他兩個答案在這裏,以解決這樣的工作方式做的很好。然而,當你想知道某種特定語言是否允許使用某種語言時,通常嘗試一下並看看會發生什麼,這通常是一種好習慣。你可能會對某些語言允許的內容感到驚訝,如果他們不這樣做,他們幾乎總是會給你一些有意義的錯誤信息。

相關問題