> -----Original Message-----
> From: Sorin Buturugeanu [mailto:m...@soin.ro] 
> Sent: Tuesday, July 20, 2010 2:11 PM
> To: php-general@lists.php.net
> Subject: [PHP] eval and HEREDOC
> Hello,
> I am having trouble with a part of my templating script. I'll 
> try to explain:
> The template itself is HTML with PHP code inside it, like:
> <div><?=strtoupper($user['name']);?></div>
> And I have the following code as part of the templating engine:
> $template = file_get_contents($file);
> $template = "return <<<TEMPLATE\n".$template."\nTEMPLATE;\n";
> $template = eval($template);
> The problem is that the eval() HEREDOC combination gives the 
> following output:
> <?=strtoupper(Array['time']);?>
> If in the HTML file (template) I use
> <div><?=strtoupper({$user['name']});?></div>
> I get  <?=strtoupper(username);?> as an output.
> I have tried closing the php tag like this:
> $template = "return <<<TEMPLATE\n?>".$template."\nTEMPLATE;\n";
> but the extra ?> only gets outputed as HTML.
> This is my first post to this mailing list, so I great you 
> all and thank you for any kind of solution to my problem.

Why are you using HEREDOC to begin with? I personally find them to be ugly
and more trouble than they're worth. 

You can write the same thing as this I think (untested):

$template = eval(file_get_contents($file));

But you might also consider using "include_once" or "require_once" instead
of this "eval()" business. 

Also note, that a string can span more than one line and have variables in
it. It can even be used with code, so HEREDOC is again useless for most

$foo = "
Hello $name,\n
Today is ".date('Y-m-d')."\n
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Nulla eros purus, pharetra a blandit non, pellentesque et leo. In augue
metus, mattis a sollicitudin in, placerat vitae elit. 
Quisque elit mauris, varius sit amet cursus sed, eleifend a mauris. 

PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to