dedlfix: Backrefence in preg_replace

Beitrag lesen

echo $begrüßung;

wieso funktioniert sowas nicht:

function weekday($month, $day)
{
   return date("d m Y", mktime(0,0,0,$month,$day,date("Y"));
}

$html_text = preg_replace("/(([0-9]{2}).([0-9]{2}).)/", "\1  ".weekday("\3","\2"), $html_text);

Was hier passiert ist folgendes:
1. die Funktion weekday wird mit den beiden Strings \3 und \2 aufgerufen.
2. mktime beschwert sich mit einer Warnung, dass ihm diese Strings nicht passen.
3. mktime gibt false zurück, das durch PHPs Typumwandlung zu 0 wird.
4. date gibt das zum Timestamp 0 passende Datum formatiert zurück "01 01 1970".
5. preg_replace wird aufgerufen. Der zweite Parameter lautet: \1  01 01 1970

preg_replace_callback(), wie wahsaga schon empfahl, wäre auch meine Empfehlung.

Sobald die Variablen aber in einer anderen Funktion benutzt werden, sind sie leer.

Variablen leben ohne weiteres Zutun nur innerhalb des Scopes in dem sie definiert sind. Siehe Handbuch-Kapitel Variable scope

echo "$verabschiedung $name";