Flexible Heredoc and Nowdoc Coming to PHP 7.3
Published on by Paul Redmond
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:
- To enable for the closing marker to be indented, and
- To remove the new line requirement after the closing marker
The current implementation as of PHP 7.2, might look like this simple example:
<?phpclass foo { public $bar = <<<EOTbarEOT;}
In 7.3, the following is valid:
<?phpclass foo { public $bar = <<<EOT bar EOT;}
The indentation of the closing marker determines how much whitespace gets stripped from each new line within the heredoc/nowdoc:
<?php // 4 spaces of indentationecho <<<END a b c END;/* a bc*/
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:
<?php stringManipulator(<<<END a b cEND); $values = [<<<ENDabcEND, '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:
<?php $name = 'Example';$str = <<<'EOD'Example of string $namespanning multiple linesusing nowdoc syntax.EOD;
The above nowdoc output will be the literal string:
Example of string $namespanning multiple linesusing 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.