PHP Funktion im Replace?

Kalma

Erfahrenes Mitglied
Hallo,

ist es möglich eine Funktion wie zum Beispiel file_get_contents(); in einem Replace aufzurufen?

preg_replace();
Da zum Beispiel


MfG
David
 
Jo, mit dem Modifier e:
PHP:
$str = 'datei.php';
$replace = preg_replace('~(.+)~e', "file_get_contents('\\1')", $str);
 
Korrekt,

gibt es hier was zu verbessern?
PHP:
<?php
	error_reporting(E_ALL);
$str = 'test.php';

$str		= 'Hey, ein include säh so aus: {include file="test.php"}... Und hier wäre ein 2. Include {include file="test.php"}';

$replace = preg_replace('/{include file=\"(.+?)\"}/e', "file_get_contents('\\1')", $str);
echo $replace;
?>
 
Zuletzt bearbeitet:
Hey,

ich habe jetzt allerdings noch eine Frage.
Ich will ja ein TPL-System programmieren und will auch eine Schleife implementieren. Bis jetzt sieht das so aus:

PHP:
<?php
	error_reporting(E_ALL);
	
	$books['titel']	 = 'Hallo';
	$books['autor']	 = 'David';
	
	$str = 'Hallo <br />
			{foreach $books AS $select}
				{$titel}
			{/foreach}';
	
	
	$search = '/{foreach (.*?) AS (.*?)}/isUe';
	$replace = "foreach(\\1 AS \\ \\2) 
				{
					echo \\3
				}";
				
	echo preg_replace($search, $replace, $str);
?>
Aber so einfach ist das nicht oder? :suspekt::rolleyes:
 
Also Schleifen sind relativ kompliziert einzubauen. Habs einmal gemacht, war ein gutes Stück Arbeit. Warum machst du es dir nicht einfacher:
Template:
PHP:
<html>
    <head>
        <title><?php echo $this->title; ?></title>
    </head>
    <body>
        <table>
        <?php foreach($this->books as $book): ?>
        <tr>
            <td><?php echo $book['titel'] . ' - ' . $book['autor']; ?></td>
        </tr>
        <?php endforeach; ?>
        </table>
    </body>
</html>

Klasse + Aufruf:
PHP:
<?php
class Template
{
  protected $_templateFile;
  protected $_vars = array();
  
  public function __construct($templateFile)
  {
    if(!file_exists("{$templateFile}.php"))
    {
      throw new InvalidArgumentException('Template file not found');
    }
    $this->_templateFile = $templateFile;       
  }
  
  public function assign($var, $value)
  {
    if(isset($this->_vars[$var]))
    {
      throw new InvalidArgumentException('Variable has already been set');
    }
    
    $this->_vars[$var] = $value;
  }
  
  public function render()
  {
    ob_start();
    include_once("view/{$this->_templateFile}.php");
    $data = ob_get_clean();
	ob_end_clean();
    return $data;
  }
 
  public function __get($var)
  {
    return isset($this->_vars[$var]) ? $this->_vars[$var] : '';
  }
}

$tpl = new Template("template");

$books = array(array('titel' => 'Buch1', 'autor' => 'Autor1'), array('titel' => 'Buch2', 'autor' => 'Autor2'));
$tpl->assign('books', $books);

echo $tpl->render();
?>
 
Zurück