Wie ein foreach innerhalb eines echo aufrufen?

Jan-Frederik Stieler

Monsterator
Moderator
Hallo,
wie kann ich innerhalb eines echo ein foreach aufrufen?

Also
PHP:
<?php if(!r::is_ajax()) echo 
'<article>'
. foreach($page->children()->visible()->flip() as $article): .
'<h1>'. html($article->title()) .'<h1>'
. endforeach .
'</article>'
?>
Ich bekomm da immer ein Parse error: syntax error, unexpected T_FOREACH.


Viele Grüße
 
Hallo,

das geht so nicht bzw. die Syntax erlaubt dies schlichtweg nicht.
Du musst das so umformen:

PHP:
<?php if(!r::is_ajax()) {
echo '<article>';
foreach($page->children()->visible()->flip() as $article):
echo '<h1>' . html($article->title()) . '<h1>';
endforeach;
echo '</article>';
}
?>

Ich würde dir aber folgende Formatierung empfehlen (inkl. Änderung von den foreach-"Kürzeln"):
PHP:
<?php
  if(!r::is_ajax()) {
    echo '<article>';
   
    foreach($page->children()->visible()->flip() as $article) {
      echo '<h1>' . html($article->title()) . '<h1>';
    }

    echo '</article>';
  }
?>
 
Hi,
danke.
Worin liegt den der grundsärzliche unterschied Kontrollstrukturen entweder mit Klammer oder Doppelpunkt zu schreiben?
Gibt es da irgendwelche Vor- oder Nachteile? Im PHP Manual steht nur was von Alternative aber nichts zu einem Grund das eine oder andere zu verwenden.

Viele Grüße
 
1. Wenn man die Alternativsyntax nutzt, kann man innerhalb derer keine normale Syntax mehr benutzen.
Gerade ausprobiert, scheint doch zu funktionieren, aber ich hatte es definitiv irgendwo gelesen.

2. Aus Designgründen. Ich habe schon immer mit Klammern gearbeitet, dabei bleibe ich auch (ok... außer VB) ;)
 
Die Alternativ-Syntax sieht aus meiner Sicht schöner aus, wenn man sie in Templates verwendet, weil man dann nicht nur eine schließende Klammer hat, sondern eben ein endforeach, endif et cetera.
 
ComFreek hat gesagt.:
Gerade ausprobiert, scheint doch zu funktionieren, aber ich hatte es definitiv irgendwo gelesen.

Ja, es gibt da zumindest so corner cases, die ziemlich unintuitiv sind:

PHP:
if(true):
    if(true){
        var_dump(true);
    }
else: // syntax error, unexpected ':' (wird wohl '{' erwartet)
    var_dump(false);
endif;

- http://stackoverflow.com/questions/5506700/php-nested-if-syntax-error

einfach nur crack hat gesagt.:
Die Alternativ-Syntax sieht aus meiner Sicht schöner aus, wenn man sie in Templates verwendet, weil man dann nicht nur eine schließende Klammer hat, sondern eben ein endforeach, endif et cetera.

Es ist jedenfalls üblich, die alternative Syntax in Templates zu nutzen. Es ist dagegen unüblich, sie in normalem Quellcode zu verwenden.

*) Für schwer zu fassende Begriffe von „üblich“. ;)
 
Zurück