John Goche
John Goche

Reputation: 433

PHP heredoc syntax

I was wondering whether:

$foo = <<< EOT
Hello, World!
EOT;

is just as valid as

$foo = <<<EOT
Hello, World!
EOT;

and in particular whether this is true in all versions of PHP (or just the latest ones).

I wonder because I want to know whether a space between the <<< and first EOT identifier is syntactically valid. For instance, my PHP interpreter 5.3.10 runs this correctly but my vim text editor does not syntax-highlight the heredoc in the same way if there is a space between <<< and EOT (the EOT identifier is colored white instead of purple).

So what is the deal here? Are both legal in all versions of PHP or not?

Upvotes: 4

Views: 11198

Answers (3)

Sjoerd
Sjoerd

Reputation: 75609

Tabs and spaces are allowed, and apparently so are quotes:

<ST_IN_SCRIPTING>b?"<<<"{TABS_AND_SPACES}({LABEL}|([']{LABEL}['])|(["]{LABEL}["])){NEWLINE} {

Source

Edit:

  • tabs and spaces are allowed from at least 2001
  • quotes were added in 2008

Upvotes: 5

Jon
Jon

Reputation: 437376

The manual says (emphasis mine) that

A third way to delimit strings is the heredoc syntax: <<<. After this operator, an identifier is provided, then a newline.

To me this means that the space is optional (and will always be optional), since in the language as a whole identifiers can be separated from neighboring tokens by any amount of whitespace -- including none.

Upvotes: 3

Destralak
Destralak

Reputation: 418

No, you should not provide a space between the <<< and the identifier. As specified in the PHP documentation:

(...) the identifier must follow the same naming rules as any other label in PHP: it must contain only alphanumeric characters and underscores, and must start with a non-digit character or underscore.

Source: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

Upvotes: 0

Related Questions