2016-08-01 18 views
0

Ich war dabei, einen Filter Helper zu machen und meine Idee nur durch grundlegende Ersetzungsfunktion mit der Weitergabe per Referenz zu testen und es wird nicht funktionieren!per Referenz funktioniert nicht in 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; 

der Ausgang ist immer so:

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

i may Dinge ausprobiert, aber ich werde nicht funktionieren, so was ist meine Schuld.

+1

Warum $ text plagen Rückkehr, wenn Sie Pass verwenden unter Bezugnahme .... aber 'str_replace()' selbst wird nicht durch Referenz übergeben, es gibt den geänderten Wert zurück –

+0

Ich versuchte mit Rückkehr und dann ich es ott, es wird nicht funktionieren, aber ohne Rückkehr gab es eine Benachrichtigung [Hinweis: Nur Variablenreferenzen sollten von zurückgegeben werden Referenz] –

Antwort

4

Sie haben keine Änderungen an der übergebenen $text-Zeichenfolge vorgenommen, da str_replace die übergebene Zeichenfolge nicht ändert - sie erhält eine Kopie des übergebenen Werts und gibt das Ergebnis zurück. Es Wenn Sie das Ergebnis von str_replace zum $text Variablen zuweisen, wird es funktionieren wie erwartet:

$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

Warum etwas zurückgeben, das als Referenz übergeben wurde? Ich weiß, dass es aus dem Code von OP kam, aber immer noch nicht überflüssig? –

+0

@HankyPanky Ja, es ist redundent, ich erwarte, dass das OP die Rückkehr hinzugefügt hat, damit er den 'Test' ausführen konnte - die Ausgabe mit der initial referenzierten Variable verglichen. – Steve

+0

Das könnte dann leicht zum Ausdruck '$ text' wechseln, dann die Funktion aufrufen und' $ text' erneut ausdrucken, zumindest in dieser Antwort, weil es den Fehler durch OP erklärt –