PHP has a braceless syntax stretching back to its roots as a template
language.  Frameworks which make use of php templating use these tags
quite frequently since it's harder to overlook an endif statement in a
sea of HTML tags than a brace.  But what of endfunction?

I did some look ups and found in the archive two of the most unhelpful
- bordering on rude - comments I've seen on the bug database.

[2003-06-09 13:40 UTC] der...@php.net > The "endif;" stuff is old
legacy syntax and is definitely not the recommended way of doing
things. For my part if can be removed for PHP 5... anyway, definitely
not something we will add.
[2009-02-17 15:41 UTC] johan...@php.net > Derick'S response to #24100
is still valid. We still prefer the {} syntax.


So sure "we" (whoever we is) prefer braces.  I prefer them in straight
code contexts - I don't want to work with them in HTML templates.
This said, the need to do a function or class closure inside a
template is rare, bordering on non-existent.

But for functions there is one case - anonymous functions -
specifically for recursion. Here's a live example that renders a
nested list.

<?php
$render = function( $categories ) use (&$render) {
        ob_start() ?>
                <ul style="padding-left: 1em;">
                        <?php foreach ($categories as $category): ?>
                        <li><?= $category['name'] ?>
                                <?php if (count($category['children']) > 0):
                                        echo $render( $category['children'] );
                                endif ?>
                        <?php endforeach ?>
                        </li>
                </ul>
        <?php return ob_get_clean();    
}
?>

This would be ever so slightly easier to read with endfunction.

<?php
$render = function( $categories ) use (&$render):
        ob_start() ?>
                <ul style="padding-left: 1em;">
                        <?php foreach ($categories as $category): ?>
                        <li><?= $category['name'] ?>
                                <?php if (count($category['children']) > 0):
                                        echo $render( $category['children'] );
                                endif ?>
                        <?php endforeach ?>
                        </li>
                </ul>
        <?php return ob_get_clean();    
endfunction
?>

I'm not going to raise too much of a fuss over it.  At the end of the
day, it's a small change.  But the elitist, dismissive comments to the
idea from the team at the time were unwarranted.

Also, I have to wonder if the position on this has changed any at all?
 Particularly since <?= has been turned on at all times as of PHP 5.4.

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

Reply via email to