Enemy of the State
Enemy of the State

Reputation: 228

Heredoc not working

<?php

$information = <<<INFO 
Name: John Smith
Address: 123 Main St
City: Springville, CA
INFO;

echo $information;

?>

Result:

Parse error: syntax error, unexpected T_SL on line 3

Upvotes: 15

Views: 16282

Answers (4)

Heredoc syntax has some strict rules we have to consider;

1 - There shouldn't be any character after opening identifier

True

"$a = <<<HEREDOC"

False

"<<<HEREDOC   "   //Remove space after opening identifier;

2 - There shouldn't be any other character after and before closing identifier except delimiter semicolon ; at the end. Also no indentation is allowed.

True

"HEREDOC;"

False

"HEREDOC  ;"   //Remove space between HEREDOC and ;

False

" HEREDOC;"   //Remove space before HEREDOC

False

"HEREDOC; "   //Remove space after ;

Heredoc string. END;

Upvotes: 5

Cisco Test
Cisco Test

Reputation: 51

https://repl.it/@CiscoTest/PHP-Heredocs-lesslessless      
    <?php
        //Heredocs start with <<< and a token ended with semi-colon
        print <<< ENDHEREOK
        We used ENDHEREOK "as" our token
              Looks like it just "print"
              things "as" it is. Let me loooook at what I just typed

        I may add some more! I m gonna end it using ENDHEREOK but any token can be used
        Give it a "try"! Also pay attention to so many double quotes because it is mandatory!
         Also yes "if" you put
        space after token(ENDHEREOK) above, you will get an error, just hit enter key after token!
        Try this on repl.it
        https://repl.it/@CiscoTest/PHP-Heredocs-lesslessless
        ENDHEREOK;
        ?>

Upvotes: 0

Crozin
Crozin

Reputation: 44376

I've just edited your question and fixed invalid formatting (SO is using Markdown). I found out that there is a space character after <<<INFO - that causes the error.

Delete that space and everything should work fine... well - it has to works fine.

Upvotes: 4

Robert Elwell
Robert Elwell

Reputation: 6668

The parser is complaining because you have whitespace after the angled brackets declaring a heredoc. You need to make sure you're actually following the heredoc syntax, which you can find on the PHP Manual site (specifically: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc).

<?php
$information = <<<ENDHEREDOC
this is my text
ENDHEREDOC;
echo $information;

Upvotes: 29

Related Questions