Flexible Heredoc and Nowdoc Coming to PHP 7.3


April 19th, 2018

Flexible Heredoc and Nowdoc Coming to PHP 7.3

Updates to the Heredoc and Nowdoc syntaxes proposed in a php.net RFC have been made for the upcoming PHP 7.3 release. The updates focus on improving look and readability:

The heredoc and nowdoc syntaxes have very rigid requirements. This has caused them to be, in-part, eschewed by developers because their usage in code can look ugly and harm readability. This proposal therefore puts forth two changes to the current heredoc and nowdoc syntaxes:

  1. To enable for the closing marker to be indented, and
  2. To remove the new line requirement after the closing marker

The current implementation as of PHP 7.2, might look like this simple example:

2class foo {
3 public $bar = <<<EOT

In 7.3, the following is valid:

2class foo {
3 public $bar = <<<EOT
4 bar
5 EOT;

The indentation of the closing marker determines how much whitespace gets stripped from each new line within the heredoc/nowdoc:

3// 4 spaces of indentation
4echo <<<END
5 a
6 b
7 c
8 END;
10 a
11 b

In the current implementation of PHP 7.2, a new line must be present to terminate a heredoc/nowdoc. PHP 7.3 removes this requirement:

4 a
5 b
6 c
9$values = [<<<END
13END, 'd e f'];

Background on Heredoc and Nowdoc

Nowdoc is available in PHP as of v5.3.0 and differs from Heredoc in the same way that a double-quoted string differs from a single quoted string. No parsing is done inside a Nowdoc, which has added single quotes around the opening marker:

3$name = 'Example';
4$str = <<<'EOD'
5Example of string $name
6spanning multiple lines
7using nowdoc syntax.

The above nowdoc output will be the literal string:

1Example of string $name
2spanning multiple lines
3using nowdoc syntax.

A Here Document is defined as follows:

In computing, a here document (here-document, here-text, heredoc, hereis, here-string or here-script) is a file literal or input stream literal: it is a section of a source code file that is treated as if it were a separate file. The term is also used for a form of multiline string literals that use similar syntax, preserving line breaks and other whitespace (including indentation) in the text.

The additional love given to Heredocs and Nowdocs should make using them in PHP more readable and less error-prone due to indentation and end in a newline. Also, the output formatting will be much cleaner because of stripping the indentation based on the closing marker.

Learn More

You can read all the details of the flexible Heredoc and Nowdoc Syntaxes RFC. PHP string documentation on Heredoc and Nowdoc is an excellent place to learn all about them and the current implementation rules as of PHP 7.2.

Filed in:

Paul Redmond

Full stack web developer. Author of Lumen Programming Guide and Docker for PHP Developers.