The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ If标签 ]

如果觉得上面的标签都无法满足条件判断要求的话,我们还可以使用if标签来定义复杂的条件判断。系统支持代码版本if和node版
本的if
。其中node版本功能最为强大,当然,如果是简单的判断,你可以代码版本。
例如:

1:node版本的if

  1. {~$nId=1}   
  2. {~$sDescription='青春是打开了就合不上的书,人生是踏上了就回不了头的路,爱情是扔出了就收不回的赌注。'}   
  3. <if condition="($nId eq 1) OR ($nId gt 100) ">{$sDescription}    
  4. <elseif condition="$nId eq 2" />two?      
  5. <else />other?   
  6. </if>   


程序运行后的编译PHP 代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 02:15:35  */ ?>   
  2. <?php $nId=1 ; ?>   
  3. <?php $sDescription='青春是打开了就合不上的书,人生是踏上了就回不了头的路,爱情是扔出了就收不回的赌注。' ; ?>   
  4. <?php if(($nId == 1) OR ($nId > 100) ) :?> <?php echo( $sDescription ); ?>    
  5. <?php elseif( $nId == 2 ): ?>two?      
  6. <?php else: ?>other?   
  7.  <?php endif; ?>   

 如图:
 

 程序运行后结果如下:
 

  1. 青春是打开了就合不上的书,人生是踏上了就回不了头的路,爱情是扔出了就收不回的赌注。  

 如图:
 


在condition属性中可以支持eq等判断表达式 ,同上面的比较标签,但是不支持带有”>”、”<”等符号的用法,因为会混淆模板解析,所以下面的用法是错误的:

  1. {~$nId=2}   
  2. <if condition="$nId < 5 "> 这是错误的语法,请修正!      
  3. <else /> error   
  4. </if>    


程序编译后的PHP 代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 02:22:11  */ ?>   
  2. <?php $nId=2 ; ?>   
  3. <?php if($nId < 5 ) :?>  这是错误的语法,请修正!      
  4. <?php else: ?> error   
  5.  <?php endif; ?>   

如图:

程序运行结果:

  1. 这是错误的语法,请修正!  

如图:


看似正确的,确实这是正确的,那么我们改一下:

  1. {~$nId=2}   
  2. <if condition="$nId > 5 "> 这是错误的语法,请修正!      
  3. <else /> error   
  4. </if>   


程序运行后编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 02:26:46  */ ?>   
  2. <?php $nId=2 ; ?>   
  3. <?php if("$nId) :?>  5 "> 这是错误的语法,请修正!      
  4. <?php else: ?> error   
  5.  <?php endif; ?>  

如图:

程序运行结果,抛出异常:

  1. 因为是错误的语法,程序编译后的代码出错,抛出异常。  

如图


必须改成:

  1. {~$nId=3}   
  2. <if condition="$nId lt 5 "> 乖啊,正确了。送句哲理性的话给你:“唱情歌的歌手很多从未爱过,爱过就不会唱得这么陶醉了。”。      
  3. <else /> 你有意见?      
  4. </if>   


程序运行后的编译PHP 代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 02:32:49  */ ?>   
  2. <?php $nId=3 ; ?>   
  3. <?php if($nId < 5 ) :?>  乖啊,正确了。送句哲理性的话给你:“唱情歌的歌手很多从未爱过,爱过就不会唱得这么陶醉了。”。      
  4. <?php else: ?> 你有意见?      
  5.  <?php endif; ?>   

如图:


程序运行后结果如下:

  1. 乖啊,正确了。送句哲理性的话给你:“唱情歌的歌手很多从未爱过,爱过就不会唱得这么陶醉了。”。  

如图:


除此之外,我们可以在condition属性里面使用php代码,例如:

  1. {~$arrProgram['name']='DoYouHaoBaby'}   
  2. <if condition="strtoupper($arrProgram['name']) eq 'DOYOUHAOBABY' "> The DoYouHaoBaby PHP Framework | 代码行云流水,开发如此简单{ NOT TM,BUT TMD }      
  3.  <else /> NoBody?   
  4. </if>  

程序运行后的编译PHP 代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 02:38:55  */ ?>   
  2. <?php $arrProgram['name']='DoYouHaoBaby' ; ?>   
  3. <?php if(strtoupper($arrProgram['name']) == 'DOYOUHAOBABY' ) :?>  The DoYouHaoBaby PHP Framework | 代码行云流水,开发如此简单{ NOT TM,BUT TMD }      
  4.  <?php else: ?> NoBody?   
  5.  <?php endif; ?>  

如图:


程序运行结果:

  1. The DoYouHaoBaby PHP Framework | 代码行云流水,开发如此简单{ NOT TM,BUT TMD }   

如图:


condition属性可以支持点语法、多维数组和多维对象语法,例如:
 
自动判断$arrProgram变量是数组还是对象

  1. {~$arrProgram['name']='DoYouHaoBaby'}   
  2. <if condition="$arrProgram.name eq 'DoYouHaoBaby' "> The DoYouHaoBaby PHP Framework | The DoYouHaoBaby Company !     
  3. <else /> other framework?       
  4. </if>    


程序运行后的编译PHP 代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 02:47:33  */ ?>   
  2. <?php $arrProgram['name']='DoYouHaoBaby' ; ?>   
  3. <?php if((is_array($arrProgram)?$arrProgram["name"]:$arrProgram->name) == 'DoYouHaoBaby' ) :?>  The DoYouHaoBaby PHP Framework | The DoYouHaoBaby Company !     
  4. <?php else: ?> other framework?      
  5.  <?php endif; ?>   


如图:

程序最后运行结果如下:

  1. The DoYouHaoBaby PHP Framework | The DoYouHaoBaby Company !  

如图:


或者知道$arrProgram变量是对象

  1. <php>   
  2.     class test{ public $name='DoYouHaoBaby'; }   
  3.     $arrProgram = new test( );   
  4. </php>   
  5. <if condition="$arrProgram:name eq 'DoYouHaoBaby' "> The {$arrProgram:name} Framework      
  6. <else /> other Framework ?   
  7. </if>    


程序运行后的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 02:55:15  */ ?>   
  2. <?php    
  3.     class test{ public $name='DoYouHaoBaby'; }   
  4.     $arrProgram = new test( );   
  5.  ?>   
  6. <?php if($arrProgram->name == 'DoYouHaoBaby' ) :?>  The <?php echo( $arrProgram->name ); ?> Framework      
  7. <?php else: ?> other Framework ?   
  8.  <?php endif; ?>  


 如图:
 


 程序最后运行结果如下:
 

  1. The DoYouHaoBaby Framework  

 如图:
 


说明:elseif 的条件和if 一模一样,你可以参考if 的用法使用。
由于if 标签的condition属性里面基本上使用的是php语法,尽可能使用判断标签和Switch标签 会更加简洁,原则上来说,能够用switch和比较标签解决的尽量不用if标签完成。因为switch和比较标签可以使用变量调节器和系统变量。如果某些特殊的要求下面,IF标签仍然无法满足要求的话,可以使用原生php代码或者PHP标签来直接书写代码。


2:代码版本的if

程序支持简洁的代码版本的语法:

我们可以在模板中使用如下:

  1. {~$nId = 1}   
  2. {if $nId==1}   
  3.    我的值为1,我为if下的内容。   
  4. {elseif $nId==2}   
  5.    我的值为2,我为elseif下的内容。   
  6. {d*else}   
  7.    我的值为{$nId},我不是谁的谁!   
  8. {/if}  


程序运行后编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 03:05:22  */ ?>   
  2. <?php $nId = 1 ; ?>   
  3. <?php if( $nId==1 ) :?>   
  4.    我的值为1,我为if下的内容。   
  5. <?php elseif( $nId==2 ) :?>   
  6.    我的值为2,我为elseif下的内容。   
  7. <?php else: ?>   
  8.    我的值为<?php echo( $nId ); ?>,我不是谁的谁!   
  9. <?php endif; ?>  


如图:


程序运行结果如下:

  1. 我的值为1,我为if下的内容。  

如图:

说明:为什么d*else的语法,因为else 和elseif冲突,引起系统解析错误。


代码版本的if和elseif变量支持‘.’、‘:’、‘->’,比如我们在模板中写下如下的代码:

  1. <php>$arrList = array(   
  2.      'demo'=>array(   
  3.          'sub_demo'=>3,   
  4.          'sub_demo2'=>array(   
  5.             'name'='DoYouHaoBaby',   
  6.          ),   
  7.      ),   
  8. );</php>   
  9.   
  10. {if $arrList['demo']['sub_demo']==3}   
  11.    我是数组的元素$arrList['demo']['sub_demo'],如果我等于3,我就被输出来!   
  12. {/if}<br>   
  13.   
  14. {if $arrList.demo.sub_demo2.name = 'DoYouHaoBaby'}   
  15.    我是对象的属性或者数组的元素,如果我的值等于DoYouHaoBaby,我就被输出!<br>   
  16.    The DoYouHaoBaby Company !   
  17. {/if}   
  18.   
  19. <php>   
  20.    class test{ public $name='DoYouHaoBaby';  }   
  21.    $oObj = new test(  );   
  22. </php>   
  23. {if $oObj:demo = 'DoYouHaoBaby'}   
  24.    我是对象的属性,如果我的值等于DoYouHaoBaby,我就被输出!<br>   
  25.    The DoYouHaoBaby Company Maybe in the future!   
  26. {/if}  


程序运行后的PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-12 03:48:53  */ ?>   
  2. <?php $arrList = array(   
  3.      'demo'=>array(   
  4.          'sub_demo'=>3,   
  5.          'sub_demo2'=>array(   
  6.             'name'=>'DoYouHaoBaby',   
  7.          ),   
  8.      ),   
  9. ); ?>   
  10.   
  11. <?php if( $arrList['demo']['sub_demo']==3 ) :?>   
  12.    我是数组的元素$arrList['demo']['sub_demo'],如果我等于3,我就被输出来!   
  13. <?php endif; ?><br><br>   
  14.   
  15. <?php if( is_array( $arrList ) ? $arrList['demo']['sub_demo2']['name'] = 'DoYouHaoBaby' : $arrList->demo->sub_demo2->name = 'DoYouHaoBaby' ) :?>   
  16.    我是对象的属性或者数组的元素,如果我的值等于DoYouHaoBaby,我就被输出!<br>   
  17.    The DoYouHaoBaby Company !   
  18. <?php endif; ?><br><br>   
  19.   
  20. <?php    
  21.    class test{ public $name='DoYouHaoBaby';  }   
  22.    $oObj = new test(  );   
  23.  ?>   
  24. <?php if( $oObj->name = 'DoYouHaoBaby' ) :?>   
  25.    我是对象的属性,如果我的值等于DoYouHaoBaby,我就被输出!<br>   
  26.    The DoYouHaoBaby Company Maybe in the future!   
  27. <?php endif; ?>  


如图:

程序最后 运行结果如下:

  1. 我是数组的元素$arrList['demo']['sub_demo'],如果我等于3,我就被输出来!    
  2.   
  3. 我是对象的属性或者数组的元素,如果我的值等于DoYouHaoBaby,我就被输出!   
  4. The DoYouHaoBaby Company !    
  5.   
  6. 我是对象的属性,如果我的值等于DoYouHaoBaby,我就被输出!   
  7. The DoYouHaoBaby Company Maybe in the future!   


如图:


说明:elseif 标签同样和if 是相同的语法,你可以参考使用。


3:代码版本的if特殊标签

如果我们需要使用静态函数来解析,我们在模板中写下如下的代码:

  1. {if G+U( 'index/index' )}   
  2. {:G::U( 'index/index' )}   
  3. {/if}  

程序编译后:
  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2011-11-13 04:29:56  */ ?>   
  2. <?php if( G::U( 'index/index' ) ) :?>   
  3. <?php echo( G::U( 'index/index' ) );?>   
  4. <?php endif; ?>  

程序运行结果如下:
/home/index.php/index/index

好了,if标签就完了,OK !