Jump to content

Var inside a String var


lowlithium

Recommended Posts

hi everyone, I'm struggling with this code, I want to put inside a string a var sent by a submit. 

I need that the var $someone changes, to the right name. This is not working, how can i do this?

$layout='
<h2 class="title"><a href="#">Title</a></h2>
<p class="meta">bla bla bla by <a href="#">'.$someone.'</a></p>
<div class="entry">
</div>';

if($someone =="john")
    echo $layout;
else
    $someone ="mary";
    echo $layout;



thanks for the help.

Link to comment
https://forums.phpfreaks.com/topic/285556-var-inside-a-string-var/
Share on other sites

Is there any reason why you can't just do it like this?

 

if ($someone !='john') 
   $someone = 'mary';

$layout='
<h2 class="title"><a href="#">Title</a></h2>
<p class="meta">bla bla bla by <a href="#">'.$someone.'</a></p>
<div class="entry">
</div>';

echo $layout;
Basically the point is that when you assign the value to $layout, php has already parsed the string and made the assignment. So the only way to change it is to either

 

a) Assign the value to $layout again (the whole string including the var, like you initially did). This isn't very efficient. At best it's double coding.

 

b) Do a search/replace of the name on $layout. In principle, this is how template engines work. Basically instead of using $someone in your $layout assignment, you'd use a unique placeholder, something like "[[someone]]" and then you'd use something like str_replace to replace "[[someone]]" with $someone. This isn't a bad method if you're actually trying to make a full template engine, but it's a bit overkill otherwise.

 

c) Re-order your logic to have the final value of $someone when you assign it to $layout in the first place. This is the most efficient method and what you should go for (and what I did in the example above), if you aren't trying to make a full template engine out of this.

 

On a sidenote, you should look into HEREDOC syntax for multi-line string assignment. It's a lot cleaner and easier to read than how you're currently assigning the value to $layout.

 

For example:

 

$layout=<<<EOS
<h2 class="title"><a href="#">Title</a></h2>
<p class="meta">bla bla bla by <a href="#">{$someone}</a></p>
<div class="entry">
</div>
EOS;
Notice how in this syntax, I do not have to break out of quotes to insert a variable. Instead, I wrap the variable in curly brackets {}. You don't even have to do that in this specific example, since php understands from the surrounding content that $someone is the full var name (because $someone< isn't a valid variable name). But I like to use {} regardless, because for example if you wanted to do $someoneblahblah and really wanted php to parse for the variable $someone, well it's going to look for a variable called $someoneblahblah. So you can disambiguate with the curly brackets by doing {$someone}blahblah. In any case, point is that you don't have to worry about breaking out of quotes for vars or escaping quotes or anything, since <<<EOS and EOS; act as the string delimiter.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.