Thinkphp标签解析如何显示到模板页面呢?

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:29   2602   0

今晚在看Thinkphp源码的时候,看到了标签解析的函数。请看具体例子:

/**
     * switch标签解析
     * 格式:
     * <switch name="a.name" >
     * <case value="1" break="false">1</case>
     * <case value="2" >2</case>
     * <default />other
     * </switch>
     * @access public
     * @param string $attr 标签属性
     * @param string $content  标签内容
     * @return string
     */
    public function _switch($attr,$content) {
        $tag        =   $this->parseXmlAttr($attr,'switch');
        $name       =   $tag['name'];
        $varArray   =   explode('|',$name);
        $name       =   array_shift($varArray);
        $name       =   $this->autoBuildVar($name);
        if(count($varArray)>0)
            $name   =   $this->tpl->parseVarFunction($name,$varArray);
        $parseStr   =   '<?php switch('.$name.'): ?>'.$content.'<?php endswitch;?>';
        return $parseStr;
    }
很明显:这个函数返回的是一个字符串。而且返回的字符串都是这种格式:
<?php switch('.$name.'): ?>'.$content.'<?php endswitch;?>
这种格式,如果直接echo 或print_r 输出的话,肯定是不行的。我就在想:怎么让这种格式的字符串起作用呢!

想了很久,终于想到一种办法能让那种格式的字符串起作用了。用file_put_contents这个函数就可以了。

测试代码:

<?php
 /*
 *@Description:
 *
 */
 function echo_char(){
  $a = 'a';
  $b = 'b';
  $c = 'c';
  $echo = '<?php echo \'\$a is '.$a.' and \$b is '.$b.' \$c is '.$c.'\';?>';
  file_put_contents("test.php", $echo);
 }
 echo_char();
?>

效果:

<?php echo '\$a is a and \$b is b \$c is c';?>

可是这时候,还有<?php ?>这个格式,用正则处理就好了。我想:在THinkphp中也是这样做的吧。如果不对,请大神指出!!

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP