Daniel (nun registriert): \\1 von preg_replace() an eigene Funktion übergeben

Beitrag lesen

Hallo,

es geht um folgenden Code:

<?php  
  
function parse_file($file)  
{  
echo"<p>function parse_file: übergebene Datei: $file</p>";  
if(empty($file) || !file_exists($file)) { echo"<p>aborted - file $file</p>"; return; }  
$handle = fopen ($file, "r");  
$filecontent = fread ($handle, filesize ($file));  
fclose ($handle);  
  
$filecontent=preg_replace("/\{file:([[:alnum:]]+\.tpl)\}/", parse_file("\\1"), $filecontent);  
  
return $filecontent;  
}  
  
  
function test($var)  
{  
$var="<p>function test: übergebene datei: <em>$var</em></p>";  
return $var;  
}  
  
  
echo parse_file("test.tpl");  
  
?>

Die test.tpl:
Dies ist test.tpl, enthält den Verweis auf test2.tpl
{file:test2.tpl}

Die test2.tpl:
<em>Dies ist test2.tpl</em>

Führe ich das ganze aus, erhalte ich folgende Ausgabe:
function parse_file: übergebene Datei: test.tpl
function parse_file: übergebene Datei: \1
aborted - file \1
Dies ist test.tpl, enthält den Verweis auf test2.tpl

Die 2. und 3. Zeile bzw. eben deren Angabe für $file machen keinen Sinn.

Beachten wir folgende Zeile:
$filecontent=preg_replace("/\{file:([[:alnum:]]+\.tpl)\}/", parse_file("\\1"), $filecontent);
Ok, evtl. etwas falsch an parse_file("\1") dachte ich mir, aber dann habe ich parse_file("\1") durch test("\1") ersetzt – der einzige Unterschied ist der Funktionsname (d.h. keine der beiden funktion ändert die übergebene Variable vor der Ausgabe ab!), aber hier erhalte ich nun eine sinnvolle Ausgabe für $file. Die gesamte Ausgabe (parse_file("\1") durch test("\1") ersetzt):
function parse_file: übergebene datei: test.tpl
Dies ist test.tpl, enthält den Verweis auf test2.tpl
function test: übergebene datei: test2.tpl

Ich habe jetzt schon ne ganze weile gesucht, aber ich verstehe einfach nicht, was ich falsch mache?

Vielen Dank schonmal für eure Hilfe!