Referenz der Kontrollstrukturen
Diese Seite führt jeden Parameter der Verzweigungs- und Schleifenfunktionen auf, wie sie in lib/eztemplate/classes/ umgesetzt sind
(eztemplateiffunction.php, eztemplateswitchfunction.php, eztemplateforeachfunction.php, eztemplateforfunction.php,
eztemplatewhilefunction.php, eztemplatedofunction.php und der gemeinsame Schleifenhelfer eztemplateloop.php). Die besondere Grammatik der
Schleifen wird in eztemplatemultipassparser.php gelesen. Sanftere Einführungen bieten die Seiten für Designer, auf die am Ende verwiesen
wird.
Inhalt
- if, elseif, else
- Was als wahr gilt
- switch und case
- foreach
- break, continue, skip
- delimiter und modulo
- for
- while
- do
- Verwandte Seiten
if, elseif, else
{if <condition>} ... [{elseif <condition>} ...] [{else} ...] {/if}Die Bedingung ist ein einzelner Ausdruck; verbinden Sie Prüfungen mit and(), or() und not(). elseif und else sind Kind-Tags von
if (seine function_attributes).
foreach array( 0, 1, 7 ) as $n
if $n|eq( 0 )noneelseif $n|eq( 1 )oneelse$n items/if
/foreachAusgabe:
noneone7 itemsWas als wahr gilt
Bedingungen nutzen die Wahrheitswerte von PHP: 0, '0', '', ein leeres Array, false() und null sind falsch. Die hier geprüften Werte
sind 0, 1, '', 'x', '0', array(), array( 0 ), false(), true():
foreach array( 0, 1, '', 'x', '0', array(), array( 0 ), false(), true() ) as $v[if $vTelseF/if]/foreachAusgabe:
[F][T][F][T][F][F][T][F][T]switch und case
{switch match=<value>}
{case match=<value>} ... {/case}
{case in=<array> [key=<array of attribute names>]} ... {/case}
{case} ... {/case} (the default)
{/switch}| Parameter | Von | Bedeutung |
|---|---|---|
match | switch | der zu vergleichende Wert; Pflicht |
match | case | dieser Fall wird genommen, wenn er dem Wert des switch gleicht (==) |
in | case | dieser Fall wird genommen, wenn der Wert des switch im Array steht (in_array) |
key | case mit in | den Wert des switch stattdessen mit diesem Attribut jedes Array-Elements vergleichen |
| keiner | case | der Standardfall |
Der erste passende Fall gewinnt. Ein zweiter Fall mit demselben Wert für match wird mit einer Warnung übersprungen.
foreach array( 1, 3, 'other' ) as $v
switch match=$vcase match=1one/casecase in=array( 2, 3 )two or three/casecasedefault for $v/case/switch
/foreachAusgabe:
onetwo or threedefault for otherMit key übergibt der Code den Wert an eZTemplate::variableAttribute(), das eine Liste von Attributnamen durchläuft. Eine einfache
Zeichenkette wird dort nicht in eine Liste umgewandelt, also findet nur die Form als Array das Element; so verhält sich eine Entwicklungsinstallation heute:
def $people = array( hash( 'id', 7, 'name', 'Ada' ), hash( 'id', 9, 'name', 'Lin' ) )
key as a string: switch match=9case in=$people key='id'found/casecasenot found/case/switch
key as an array: switch match=9case in=$people key=array( 'id' )found/casecasenot found/case/switchAusgabe:
key as a string: not foundkey as an array: foundWenn nichts passt und es keinen Standardfall gibt, gibt der switch nichts aus und warnt:
[switch match=5case match=1one/case/switch]Ausgabe:
[]Von der Template-Engine protokolliert:
WARNING switch: No case match and no default caseforeach
{foreach <array> as [$key =>] $item
[sequence <array> as $seq] [offset <n>] [max <n>] [reverse]}
...
{/foreach}| Parameter | Bedeutung |
|---|---|
<array> as $item | das Array und die Variable für jeden Wert; Pflicht |
$key => | eine Variable für jeden Schlüssel |
sequence <array> as $seq | wechselt durch das Array, ein Wert pro Durchlauf |
offset <n> | bei Position n beginnen; außerhalb des Bereichs wird mit einer Warnung zurückgesetzt |
max <n> | höchstens n Durchläufe; ein negativer Wert wird mit einer Warnung ignoriert |
reverse | vom Ende her durchlaufen; ein bloßes Wort, ohne Wert |
offset und max zählen Positionen, keine Schlüssel; mit reverse zählt der Offset vom Ende. Die Variablen für Schlüssel, Element und
Sequenz sind gewöhnliche Variablen der Datei, nicht eines Namensraums.
foreach array( 'a', 'b', 'c', 'd', 'e' ) as $i => $v sequence array( 'x', 'y' ) as $s offset 1 max 3[$i:$v:$s]delimiter|/delimiter/foreach
foreach array( 1, 2, 3, 4 ) as $v reverse$v/foreach
foreach hash( 'one', 1, 'two', 2 ) as $key => $value$key=$value /foreachAusgabe:
[1:b:x]|[2:c:y]|[3:d:x]4321one=1 two=2Ein leeres Array führt den Rumpf null Mal aus, ohne Warnung:
[foreach array() as $v$v/foreach] empty array: no outputAusgabe:
[] empty array: no outputVerlassen Sie sich nach der Schleife nicht auf die Schleifenvariablen. Ein interpretiertes Template entfernt eine Variable, die die Schleife angelegt hat, ein kompiliertes behält sie mit ihrem letzten Wert; eine Variable, die vor der Schleife existierte, wird in beiden Modi überschrieben:
foreach array( 1, 2 ) as $v/foreach
[if is_set( $v )v still setelsev removed after the loop/if]
def $item = 'before'
foreach array( 1, 2 ) as $item/foreach
[$item]Ausgabe:
[v removed after the loop][2]Ausgabe mit dem Template-Compiler (in einen Arbeitsordner kompiliert):
[v still set][2]Mit eingeschalteter Template-Kompilierung, wie auf einer Live-Website, bekommen Besucher das kompilierte Ergebnis.
foreach läuft nicht über die Zeichen einer Zeichenkette oder über einen Zahlenbereich; nutzen Sie for für Bereiche, und siehe
Sections und foreach dazu, was section mit Zeichenketten tut.
break, continue, skip
Alle vier Schleifen (foreach, for, while, do) akzeptieren diese Kind-Tags, auch innerhalb eines if in der Schleife
(eZTemplateLoop::processChildren()):
| Tag | Beendet | Nächster Durchlauf | Delimiter nach diesem Durchlauf | Sequenz rückt weiter |
|---|---|---|---|---|
{break} | die Schleife | nein | nein | nein |
{continue} | diesen Durchlauf | ja | ja | nein |
{skip} | diesen Durchlauf | ja | nein | nein |
In dieser Schleife wird bei 2 fortgesetzt (sein Delimiter wird trotzdem ausgegeben, daher der doppelte Bindestrich), 4 wird übersprungen (kein Delimiter), und bei 6 wird abgebrochen:
foreach array( 1, 2, 3, 4, 5, 6 ) as $vif eq( $v, 2 )continue/ifif eq( $v, 4 )skip/ifif eq( $v, 6 )break/if$vdelimiter-/delimiter/foreachAusgabe:
1--3-5-delimiter und modulo
{delimiter}...{/delimiter} wird zwischen den Durchläufen ausgegeben. Es muss ein direktes Kind der Schleife sein. Mit modulo=<n> wird es
nur ausgegeben, wenn der Index des Durchlaufs durch n teilbar ist:
foreach array( 1, 2, 3, 4, 5, 6 ) as $v$vdelimiter modulo=2 / /delimiter/foreachAusgabe:
12 / 34 / 56for
{for <first> to <last> as $i [sequence <array> as $seq]} ... {/for}Zählt vom ersten bis einschließlich zum letzten Wert, aufwärts oder abwärts. Die Schleifenhelfer gelten; in der dritten Schleife wird der
Delimiter nach 3 ausgegeben, bevor das {break} des nächsten Durchlaufs läuft:
for 1 to 5 as $i sequence array( 'o', 'e' ) as $s$i$s /for
for 5 to 1 as $i$i/for
for 0 to 10 as $iif $i|gt( 3 )break/if$idelimiter,/delimiter/forAusgabe:
1o 2e 3o 4e 5o 543210,1,2,3,while
{while <condition> [sequence <array> as $seq]} ... {/while}Die Bedingung wird vor jedem Durchlauf ausgewertet. Ändern Sie die geprüfte Variable im Rumpf mit {set}, sonst endet die Schleife nicht:
def $n = 0
while $n|lt( 3 ) sequence array( 'a', 'b' ) as $s[$n$s]set $n = $n|inc/whileAusgabe:
[0a][1b][2a]do
{do} ... {/do while <condition> [sequence <array> as $seq]}Die Bedingung steht im End-Tag und wird nach jedem Durchlauf geprüft; der Rumpf läuft also mindestens einmal, auch wenn die Bedingung von Anfang an falsch ist:
def $n = 5
do[$n]set $n = $n|inc/do while $n|lt( 3 )Ausgabe:
[5]Verwandte Seiten
- Zurück: Funktionen und Operatoren
- Weiter: Sections und foreach
- If und Bedingungen, Switch und case
- Foreach-Schleifen, For-Schleifen, While- und do-Schleifen
- foreach, switch, aus dem Code erzeugt
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.