If the syntax of heredocs/nowdocs is to be loosened, the biggest aspect I’d 
like to see addressed is indentation. I can certainly see how it would be nice 
to loosen the restrictions around the post-closing-token newline to allow 
easier use in places like array definitions, but, I’ve never run into that 
problem myself. I have, however, been annoyed by the indentation limitations, 
so much so that I could probably count with my fingers the number of times that 
I’ve used the construct in the couple million lines of PHP I’ve written — even 
though I *want* to use it about once a week. I just find the side-effect on 
code formatting, when used in a container structure (class, function, method, 
loop, whatever), to be more than I can handle. Look at this simple example from 
the docs to see what I mean:

<http://php.net/manual/en/language.types.string.php#example-89>

One of the key benefits of consistent indentation is that it allows very rapid 
visual navigation of code by nearly eliminating the need for reading until 
you’ve zoned in on the right section of code. To illustrate this very well, 
just try to visually identify the code structure in this old-school BASIC code:

<http://www.atariarchives.org/basicgames/showpage.php?page=3>

That this restriction warrants italicized text inside a pink warning box in the 
docs suggests both that lots of people bump into it and that it runs counter to 
the expectations of the language.

Now, perhaps I’ve not felt constrained by the newline restriction simply 
because I so rarely get to use the construct at all because of the indentation 
restriction. That’s actually probably the case. So that idea is important to 
address, but I think it’s pointless to address without also addressing 
indentation.

What if we could do something like this:

function foo() {
   $string = <<<
      THEEND
      This is the document text. Any
      whitespace appearing in a column
      that’s before the starting token
      is automatically ignored for all
      lines.
   THEEND;

A few particulars:

* If the starting token appears immediately adjacent to the <<< sequence, then 
parsing is done according to existing rules (perhaps with the changes in the 
RFC). This both maintains BC and avoids issues where more or less whitespace is 
ignored when, for example, the variable is renamed.

* Extending the original proposal, the closing token can be indented without 
concern. Align it with the starting token, with the assignment line, whatever.

* The closing token could not appear within the text.

I’ve not given this solution deep thought, so I’m sure there are problems I’m 
missing. But if there’s a good solution to the indentation restrictions, I 
think it would be a huge win. And with the AST-based parser, there may be 
solutions that are possible now that were previously impossible, which makes 
this a good time to reconsider the problem.

--
Bob Williams
SVP, Software Development
Newtek Business Services, Inc.
“The Small Business Authority”
http://www.thesba.com/


Notice: This communication, including attachments, may contain information that 
is confidential. It constitutes non-public information intended to be conveyed 
only to the designated recipient(s). If the reader or recipient of this 
communication is not the intended recipient, an employee or agent of the 
intended recipient who is responsible for delivering it to the intended 
recipient, or if you believe that you have received this communication in 
error, please notify the sender immediately by return e-mail and promptly 
delete this e-mail, including attachments without reading or saving them in any 
manner. The unauthorized use, dissemination, distribution, or reproduction of 
this e-mail, including attachments, is prohibited and may be unlawful. If you 
have received this email in error, please notify us immediately by e-mail or 
telephone and delete the e-mail and the attachments (if any).

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to