2012-12-15 18 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);} 

が呼び出す:PHPで

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

素晴らしい回避策と情報、ありがとう。ネイティブの振る舞いについての情報が追加されたため、もう1つを受け入れました(後で編集した*)。 –

+0

...そして、値を返すすべてのPHP関数でこのような新しい関数を作成します。その場合はおそらく別の言語を見つける方が良いでしょう... –

2

ほとんどの機能が成熟で不変であるが、すなわち彼らは変更しないでくださいあなたがそれらに渡す引数。これにはいくつかの利点があり、そのうちの1つは副作用のない式で戻り値を使用できます。ここで

あなたは、単一の引数を取る任意の関数のための可変動作を模倣するために使用できる汎用ラッパーです:

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

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

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

マイレージは、私は他の回答のいずれかが優れている理由を参照していけない:)

+0

ニース!ちょうど私はすでにポインタを取るPHP関数の問題に遭うかもしれないと恐れています...そのようなものはありますか?さて、冗長な質問、私はちょうどこの機能を使用する前に、マニュアルを確認することができますね。 –

+1

はい、注意して使用する必要があります:) –

関連する問題