3

i'm starting to work with php basics and i have some problem understanding how mix code with strings.

I found a great and useful style to print string blocks but i don't know the name and i'm not able to find examples.

the code below return me the error:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /web/htdocs/food/user/index.php on line 120

<?php   
$html_str = <<<STR
    <li><img alt="hello" src="$path_images/pencil.png"/><a title="hello" href="$path_pages/$page/action">Details</a></li>

STR;
print $html_str;
?>

can someone help me to find where i'm wrong and the name of this syntax style?

thanks v

1
  • Just a quote regarding heredoc indentation from the manual: "The closing identifier may be indented by space or tab, in which case the indentation will be stripped from all lines in the doc string. Prior to PHP 7.3.0, the closing identifier must begin in the first column of the line." Commented Oct 29, 2022 at 15:14

2 Answers 2

5

I've found the problem!
in the example I've posted it can't return the error:

Working code

<?php
$str = <<<STRING
hello! this is a working string<br/>
and i can do too many things with heredoc syntax!
STRING;

print $str;
?>

Not working code

<?php
     $str = <<<STRING
     syntax error!<br/>
     syntax error!<br/>
     why?
     STRING;

     print $str;
?>

The problem are the tabs before the close tag STRING; which are considered part of tag, so the close tag is not interpreted "STRING;" but "        STRING;", that's why it doesn't work.

hope it come usefull for someone else.

Sign up to request clarification or add additional context in comments.

Comments

1

The name of the syntax is HEREDOC strings or "here documents".

But when I run your code on my server, I don't get the token errors that you do, though. Maybe your error is actually somewhere else?

2 Comments

thanks for your test, I tried with something more easy like this but the server return me the same error... $str = <<<STR hello STR; print $str; can it be some missing module in the server? thanks again
yes, i try the code on aruba.it server, but it should have all the php base components... i'll do a search!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.