流程控制

Testing Is Documentation

tests/View/Compiler/CompilerIfTest.php流程控制 - 图1

条件表达式是最基本流程控制语句,这个在任何地方都是相当的实用。

Code 语法流程控制

  1. public function testBaseUse(): void
  2. {
  3. $parser = $this->createParser();
  4. $source = <<<'eot'
  5. {if $id==1}
  6. 我的值为1,我为if下的内容。
  7. {elseif $id==2}
  8. 我的值为2,我为elseif下的内容。
  9. {else}
  10. 我的值为{$id},我不是谁的谁!
  11. {/if}
  12. eot;
  13. $compiled = <<<'eot'
  14. <?php if ($id==1): ?>
  15. 我的值为1,我为if下的内容。
  16. <?php elseif ($id==2): ?>
  17. 我的值为2,我为elseif下的内容。
  18. <?php else: ?>
  19. 我的值为<?php echo $id; ?>,我不是谁的谁!
  20. <?php endif; ?>
  21. eot;
  22. $this->assertSame($compiled, $parser->doCompile($source, null, true));
  23. }

Code 语法流程控制支持表达式

  1. public function testCodeStyleSupportExpression(): void
  2. {
  3. $parser = $this->createParser();
  4. $source = <<<'eot'
  5. {if $a->name == 1}
  6. a
  7. {/if}
  8. {if hello::run() == 1}
  9. b
  10. {/if}
  11. eot;
  12. $compiled = <<<'eot'
  13. <?php if ($a->name == 1): ?>
  14. a
  15. <?php endif; ?>
  16. <?php if (hello::run() == 1): ?>
  17. b
  18. <?php endif; ?>
  19. eot;
  20. $this->assertSame($compiled, $parser->doCompile($source, null, true));
  21. }

Node 语法流程控制

条件支持的一些运算符替换语法如下:

支持字符替换字符
band&
bxor^
bor|
bnot~
bleft<<
bright>>
and&&
or||
not!=
dot->
nheq!==
heq===
neq!=
eq==
egt>=
gt>
elt<=
lt<
  1. public function testNodeStyle(): void
  2. {
  3. $parser = $this->createParser();
  4. $source = <<<'eot'
  5. <if condition="($id eq 1) OR ($id gt 100)">one
  6. <elseif condition="$id eq 2" />two?
  7. <else />other?
  8. </if>
  9. eot;
  10. $compiled = <<<'eot'
  11. <?php if (($id == 1) OR ($id > 100)): ?>one
  12. <?php elseif ($id == 2): ?>two?
  13. <?php else: ?>other?
  14. <?php endif; ?>
  15. eot;
  16. $this->assertSame($compiled, $parser->doCompile($source, null, true));
  17. }

Node 语法流程控制支持表达式

  1. public function testNodeStyleSupportExpression(): void
  2. {
  3. $parser = $this->createParser();
  4. $source = <<<'eot'
  5. <if condition="$a.name == 1">
  6. one
  7. </if>
  8. <if condition="hello::run() == 1">
  9. two
  10. </if>
  11. eot;
  12. $compiled = <<<'eot'
  13. <?php if ($a->name == 1): ?>
  14. one
  15. <?php endif; ?>
  16. <?php if (hello::run() == 1): ?>
  17. two
  18. <?php endif; ?>
  19. eot;
  20. $this->assertSame($compiled, $parser->doCompile($source, null, true));
  21. }

JS 语法流程控制

  1. public function testJsStyle(): void
  2. {
  3. $parser = $this->createParser();
  4. $source = <<<'eot'
  5. {% if length(users) > 0 %}
  6. a
  7. {% elseif foo.bar > 0 %}
  8. b
  9. {% else %}
  10. c
  11. {% /if %}
  12. eot;
  13. $compiled = <<<'eot'
  14. <?php if (length($users) > 0): ?>
  15. a
  16. <?php elseif ($foo->bar > 0): ?>
  17. b
  18. <?php else: ?>
  19. c
  20. <?php endif; ?>
  21. eot;
  22. $this->assertSame($compiled, $parser->doCompile($source, null, true));
  23. }