今晚在看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中也是这样做的吧。如果不对,请大神指出!!
|