Dougal Campbell's geek ramblings

WordPress, web development, and world domination.

You learn something new every day

Last night, I was helping my wife with some PHP code for an email form. To create the email message, I had her use a heredoc, which is a convenient way to put a large block of text into a variable, while interpolating other variables into it. But it was giving us errors. What we discovered is that you can’t do this:


  $message = <<<MSG
  Hello $postvars['FirstName']
  MSG;

Even though heredocs can accept other complex variable substitutions, like $var->foo[1], it seems that the quoting on the index messes with the interpolation. So you have to use a more explicit syntax to help PHP figure out where the variables start and end:


  $message = <<<MSG
  Hello {$postvars['FirstName']}
  MSG;

Of course, this doesn’t just apply to heredocs, it applies to any interpolated (e.g., double-quoted) string in PHP.

I’m posting this as a future reference for myself, and for anyone else who might run across this problem in the future.

About Dougal Campbell

Dougal is a web developer, and a "Developer Emeritus" for the WordPress platform. When he's not coding PHP, Perl, CSS, JavaScript, or whatnot, he spends time with his wife, three children, a dog, and a cat in their Atlanta area home.
This entry was posted in Tech and tagged , , . Bookmark the permalink.

3 Responses to You learn something new every day

  1. roderickm says:

    Thanks! I just drop the index quoting, likeso:
    Hello $postvars[FirstName]
    …which is not the best. I’ll start encapsulating in braces, now.

  2. Dougal says:

    Right, that will work, but it’s deprecated. I haven’t checked, but it might not work anymore in PHP 5 (unless the symbol inside the brackets is already defined as a constant).

  3. strick says:

    yes PHP yearns to be as unpredictable as Perl.

    ::little face of pathetic amusement::

Leave a Reply

%d bloggers like this: