2012-12-15 50 views
5

我不得不這樣做:如何在PHP中調用變量的函數?

 
$sourceElement['description'] = htmlspecialchars_decode($sourceElement['description']); 

我想避免變量名的冗餘提。我想:

 
htmlspecialchars_decode(&$sourceElement['description']); 

 
call_user_func('htmlspecialchars_decode', &$sourceElement['description']); 

這沒有奏效。這在PHP中可能嗎?在上調用函數一個變量?

回答

2

這取決於功能。 htmlspecialchars_decode()返回結果,它不會修改原始變量。你無能爲力。

+0

我不明白爲什麼任何其他的答案是更好而不僅僅是接受PHP的工作方式。 +1不發佈任何不必要的「解決方法」。 –

3

正確解決方案將是,以包括「冗餘」變量提。它更具可讀性,並且不那麼令人困惑。

$sourceElement['description'] = htmlspecialchars_decode($sourceElement['description']); 

你的思維方式是好的,但,你在想如何縮短你的代碼,像一個真正的懶惰的程序員=)

7

你可以創建自己的包裝功能,通過引用,採用變量:

function html_dec(&$str) {$str = htmlspecialchars_decode($str);} 

然後調用:

html_dec($sourceElement['description']); 
+0

很好的解決方法和信息,謝謝。我接受了另一個,因爲增加了關於本地行爲的信息(* sigh *後來被編輯出來)。 –

+0

...然後我爲所有返回值的PHP函數創建這樣的新函數,我想使用它?在那種情況下,它可能更好地找到另一種語言... –

2

在PHP中的大多數功能都在成熟的不可變的,即它們不修改你傳遞給他們的論點。這有幾個優點,其中一個能夠在沒有副作用的表達式中使用它們的返回值。

這裏有一個通用的包裝,你可以用它來模擬可變的行爲,需要一個單一的參數中的任何功能:

function applyFn(&$s, $fn) 
{ 
    return $s = $fn($s); 
} 

applyFn($sourceElement['description'], 'htmlspecialchars_decode'); 

applyFn($sourceElement['description'], 'trim'); // trim string 

里程可能會有所不同:)

+0

不錯!只是害怕我可能會遇到麻煩的PHP函數已經採取指針......有沒有這樣的一切?好的,多餘的問題,我想我可以在任何功能上使用這個之前檢查手冊。 –

+1

是的,它應該小心使用:) –