2016-08-01 27 views
0

私はフィルタヘルパーを作成しようとしていました。は、PHPで動作しません

<?php 
$text ="hello world i am here !"; 

function findandreplace(&$text, $search, $replaced) 
{ 

    return str_replace($search, $replaced, $text); 

} 

print findandreplace($text,'e','E'); 
print "<br>"; 
print $text; 

出力は、そのように常にある:

hEllo world i am hErE ! 
hello world i am here ! 

私は5月の事を試してみましたが、私は動作しませんので、私のせいとは何か。

+1

なぜ$テキストを返す気に....しかし、 'str_replace()'それ自体は参照渡しではありません。変更された値 –

+0

を返します。返り値を使用して試しましたが、私はそれを実行しませんでしたが、戻りませんでした。参照] –

答えて

4

str_replaceは、渡された文字列を変更しないので、渡された$text文字列を変更していません。渡された値のコピーを受け取り、結果を返します。それあなたが$text変数にstr_replaceの結果を割り当てた場合、予想通り、それは動作します :?あなたが参照することにより、パスを使用している場合

$text ="hello world i am here !"; 

function findandreplace(&$text, $search, $replaced) 
{ 

    $text = str_replace($search, $replaced, $text); //<-- now it will work 
    return $text; 

} 

print findandreplace($text,'e','E'); 
print "<br>"; 
print $text; 
+1

なぜ参照渡しされたものを返すのですか?私はそれがOPのコードから来たが、まだそれは冗長ではないことを知っていますか? –

+0

@HankyPankyはい、それは冗長です、私は彼が 'テスト'を実行できるようにOPが復帰を追加すると期待しています - 出力を初期参照変数と比較してください。 – Steve

+0

それでは簡単に '$ text'を出力するように変更してから、関数を呼び出して、少なくともこの答えの原因でもう一度$ textを出力してください。OP –

関連する問題