preg_replace_callback an Class Funktion übergeben
Andavos
- php
Hallo,
also in einer Class rufe ich per preg_replace_callback() eine andere Funktion in der gleichen Class auf.
Dies habe ich so gelöst:
$this->vars = preg_replace_callback("/($ausdurck)/si", array($this,'funktion'), $this->vars);
Die Funktion sieht so aus
class Name
{
//...
function funktion($werte,$ausgabe=1,$speichern=1)
{
//....
return 0;
}
//...
}
Jetzt würde bei einem Aufruf der Funktion gerne die Optional Werte $ausgabe und $speichern ändern.
Ist dies möglich und wenn ja, wie muss dass dann bei pre_replace_callback aussehen?
MFG
Andavos
Hi!
function funktion($werte,$ausgabe=1,$speichern=1)
{
//....
return 0;
}
Jetzt würde bei einem Aufruf der Funktion gerne die Optional Werte $ausgabe und $speichern ändern.
Ist dies möglich und wenn ja, wie muss dass dann bei pre_replace_callback aussehen?
Was spricht gegen eine Wrapper-Funktion, die "funktion" mit entsprechenden Parametern aufruft?
Grüße
Andreas
echo $begrueszung;
Arbeitest du mit PHP4 oder mit PHP5? Der Unterschied liegt in der Art der Parameterübergabe bei Objekten. PHP4 übergibt eine Kopie, PHP5 eine Referenz.
Da du deine PHP-Version nicht angegeben hast, nehme ich an, dass du PHP4 verwendest.
$this->vars = preg_replace_callback("/($ausdurck)/si", array($this,'funktion'), $this->vars);
Mit PHP4 solltest du eine Referenz auf die aktuelle Instanz ( &$this ) bei der Callback-Übergabe angeben [1], damit die Methode der aktuellen Instanz aufgerufen wird, und damit darin auch die Eigenschaften der aktuellen Instanz verwendbar sind.
function funktion($werte,$ausgabe=1,$speichern=1)
Die Übergabe der beiden Extra-Parameter hat keinen Wert wenn sie von preg_replace_callback() aus aufgerufen wird. Wenn du extra Werte festhalten willst, solltest du das in Instanz-Eigenschaften (oder globalen Variablen) tun.
echo "$verabschiedung $name";
[1] Hier schimpft auch ein ausgeschaltetes allow_call_time_pass_reference nicht.
Hallo,
Mit PHP4 solltest du eine Referenz auf die aktuelle Instanz ( &$this ) bei der Callback-Übergabe angeben [1]
Hab das Problem jetzt anders gelöst.
Aber wie sieht denn eine Renferenz-Übergabe in einer Class aus?
P.S. Der Script soll sowohl PHP4 (am besten >=4.0.5) als auf PHP5 kompatibel sein.
Aber das muss ich nochmal testen, bisher ist PHP4.3.10 als Version zum entwickeln benutzt worden.
MFG
Andavos
echo $begrueszung;
Mit PHP4 solltest du eine Referenz auf die aktuelle Instanz ( &$this ) bei der Callback-Übergabe angeben [1]
Aber wie sieht denn eine Renferenz-Übergabe in einer Class aus?
Indem du statt $this eben &$this angibst. Für ein Callback gibt man eine Methode dann eben so an:
array(&$this, 'methodeName')
Hier noch mal alle Varianten, callbacks anzugeben:
'functionName'
array('className', 'methodName') // Aufruf einer statischen Klassen-Methode
array($this, 'methodName') // Kopie der aktuellen Instanz
array(&$this, 'methodName') // aktuelle Instanz
Beim Umstieg auf PHP5 ist bei Verwendung von Klassen mindestens die Referenz-Problematik zu beachten.
Wenn man in PHP4 sich keine Gedanken gemacht hat, was bei $var = $anObject; passiert, und Referenzen &$anObject nur dann verwendet hat, wenn es gar nicht anders ging (siehe oben), dann wird man höchstwahrscheinlich keine Probleme bekommen.
Wenn man jedoch bewusst $aCopy = $anObject; verwendet hat, um beim Verarbeiten von $aCopy die Eigenschaften von $anObject unverändert zu lassen, muss man beim Wechsel aufpassen und ein clone dazwischenschieben.
echo "$verabschiedung $name";