Join 25,000+ Laravel Developers and join the free Laravel Newsletter
Flexible Heredoc and Nowdoc Coming to PHP 7.3
News / April 19, 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:

<?php
class foo {
    public $bar = <<<EOT
bar
EOT;
}

In 7.3, the following is valid:

<?php
class 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 indentation
echo <<<END
      a
     b
    c
    END;
/*
  a
 b
c
*/

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
 c
END);

$values = [<<<END
a
b
c
END, '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 $name
spanning multiple lines
using nowdoc syntax.
EOD;

The above nowdoc output will be the literal string:

Example of string $name
spanning multiple lines
using 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 addition 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.

This appeared first on Laravel News
Laravel News Partners

Newsletter

Join the weekly newsletter and never miss out on new tips, tutorials, and more.