For 循环
Testing Is Documentation
tests/View/Compiler/CompilerForTest.php
如果我们需要在模板中使用 for 循环,那么通过 for 标签可以很方便地输出。
code
public function testBaseUse(): void
{
$parser = $this->createParser();
$source = <<<'eot'
{for $i=1;$i<10;$i++}
QueryPHP - 代码版本for <br>
{/for}
eot;
$compiled = <<<'eot'
<?php for ($i=1;$i<10;$i++): ?>
QueryPHP - 代码版本for <br>
<?php endfor; ?>
eot;
$this->assertSame($compiled, $parser->doCompile($source, null, true));
}
node 简单版
public function testForNode(): void
{
$parser = $this->createParser();
$source = <<<'eot'
<for start='1'>
QueryPHP - node - for <br>
</for>
eot;
$compiled = <<<'eot'
<?php for ($var = 1; $var <= 0; $var += 1): ?>
QueryPHP - node - for <br>
<?php endfor; ?>
eot;
$this->assertSame($compiled, $parser->doCompile($source, null, true));
}
node 完整版
public function testForNode2(): void
{
$parser = $this->createParser();
$source = <<<'eot'
<for start='1' end='10' var='myValue' step='3'>
QueryPHP for <br>
</for>
eot;
$compiled = <<<'eot'
<?php for ($myValue = 1; $myValue <= 10; $myValue += 3): ?>
QueryPHP for <br>
<?php endfor; ?>
eot;
$this->assertSame($compiled, $parser->doCompile($source, null, true));
}
JS 风格版: 例 1
最终生成一个 foreach 结果,简单的循环。
public function testForJsStyle(): void
{
$parser = $this->createParser();
$source = <<<'eot'
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% /for %}
eot;
$compiled = <<<'eot'
<?php foreach ($navigation as $key => $item): ?>
<li><a href="<?php echo $item->href; ?>"><?php echo $item->caption; ?></a></li>
<?php endforeach; ?>
eot;
$this->assertSame($compiled, $parser->doCompile($source, null, true));
}
JS 风格版: 例 2
可以使用逗号分割建和值,逗号连接不能有空格。
public function testForJsStyle2(): void
{
$parser = $this->createParser();
$source = <<<'eot'
{% for mykey,item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% /for %}
eot;
$compiled = <<<'eot'
<?php foreach ($navigation as $mykey => $item): ?>
<li><a href="<?php echo $item->href; ?>"><?php echo $item->caption; ?></a></li>
<?php endforeach; ?>
eot;
$this->assertSame($compiled, $parser->doCompile($source, null, true));
}
JS 风格版: 例 3
可以使用空格分割建和值。
public function testForJsStyle3(): void
{
$parser = $this->createParser();
$source = <<<'eot'
{% for mykey item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% /for %}
eot;
$compiled = <<<'eot'
<?php foreach ($navigation as $mykey => $item): ?>
<li><a href="<?php echo $item->href; ?>"><?php echo $item->caption; ?></a></li>
<?php endforeach; ?>
eot;
$this->assertSame($compiled, $parser->doCompile($source, null, true));
}