> -----Original Message-----
> From: Sorin Buturugeanu [mailto:[email protected]]
> Sent: Tuesday, July 20, 2010 2:11 PM
> To: [email protected]
> 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
situations:
$foo = "
Hello $name,\n
\n
Today is ".date('Y-m-d')."\n
\n
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
\n
Nulla eros purus, pharetra a blandit non, pellentesque et leo. In augue
metus, mattis a sollicitudin in, placerat vitae elit.
\n
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