Záměna proměnných v řetězci


26-08-2011 00:00 - Zdroj: php.vrana.cz
Pro vygenerování HTML kódu ve webové aplikaci obvykle používám šablony, konkrétně Latte. Někdy je to ale zbytečně těžký kalibr a úplně by mi stačilo v textu nahradit pár proměnných. Něco jako sprintf, ale s tím, že by proměnné byly pojmenované. K tomu se dá použít funkce preg_replace_callback, pomocí které vyhledáme proměnné v určitém formátu a nahradíme je na základě pole s definovanými hodnotami. Řešení v PHP 5.3 PHP 5.3 nám díky anonymním funkcím nabízí elegantní řešení. Funkci pro záměnu můžeme definovat přímo při volání a můžeme jí určit, že může používat pole s hodnotami. <?php /** Náhrada proměnných v řetězci * @param string řetězec $abc se nahradí za proměnnou, $$ za dolar * @param array ('abc' => 'hodnota') * @return string */ function replaceVariables($template, $variables) { return preg_replace_callback( '~\$([a-z_][a-z0-9_]*|\$)~i', function ($match) use ($variables) { if ($match[1] == '$') { return '$'; } return $variables[$match[1]]; }, $template ); } echo replaceVariables('Hello $name!', array('name' => 'World')); ?> Řešení v PHP 5 V PHP < 5.3 si s funkcí nevystačíme a musíme definovat třídu, která si hodnoty uloží do pomocné vlastnosti: <?php class VariablesReplacer { protected $variables; private $string; function __construct($template, $variables) { $this->variables = $variables; $this->string = preg_replace_callback( '~\$([a-z_][a-z0-9_]*|\$)~i', array($this, 'replace'), $template ); } function __toString() { return $this->string; } protected function replace($match) { if ($match[1] == '$') ... - Pokračovat...
addthis





Poslední příspěvky z blogu:
php.vrana.cz



Zašlete svůj blog
Požadavky na Blog
Ochrana osobních údajů
Kontakty

This site uses Thumbshots previews