PHP中几个小问题

1.定界符中的变量解析问题
$data = array('name' => 'caihf', 'province' => 'hubei');
echo <<<END
My name is: $data['name'], i come from $data['province']
END
/*
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in E:myphp esearch est.php on line 4
*/

echo <<<END
My name is: {$data['name']}, i come from {$data['province']}
END
就不会报错了


定界符在PHP手册中的说明
另一种给字符串定界的方法使用定界符语法(“<<<”)。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。

结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。

警告 
很重要的一点必须指出,结束标识符所在的行不能包含任何其它字符,可能除了一个分号(;)之外。这尤其意味着该标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符。例如在 Macintosh 系统中是 。

如果破坏了这条规则使得结束标识符不“干净”,则它不会被视为结束标识符,PHP 将继续寻找下去。如果在这种情况下找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。

不能用定界符语法初始化类成员。用其它字符串语法替代。 下面是一个非法的例子
<?php
class foo {
    public $bar = <<<EOT
bar
EOT;
}
?>

定界符文本表现的就和双引号字符串一样,只是没有双引号。这意味着在定界符文本中不需要转义引号,不过仍然可以用以上列出来的转义代码。变量会被展开,但当在定界符文本中表达复杂变量时和字符串一样同样也要注意。 


2.关于exit的问题
几行代码如下:
printPage();
exit; //虽然这儿有exit,但是exit后面的函数确可以被exit上面的程序调用

function printPage() {
    echo 'This is a test page' . NEWLINE;
}


3.关于模板
PHP中有Smarty、PHPLIB等模板,
但是实际上我们可以把PHP文件自身看成是模板,同时模板的大致原理就是把模板特定的标记替换为PHP的语法,然后把替换以后的结果包含起来执行,有的模板有编译缓存,有的则没有,有模板编译缓存的好处是当模板没有变化时不需要重新编译模板。

我们现在来弄个小模板做个小的测试
test.php文件内容如下:
displayPage();
exit;

function displayPage() {
    $title = '从徐静蕾的网店看名人如何利用网络掘金';
    $url = 'http://gb.cri.cn/27824/2009/11/13/882s2675475.htm';
    include_once(dirname(__FILE__) . '/test.tpl.html');
}

test.tpl.html的文件内容如下,当然test.tpl.html自已来执行没有任何意义,它主要是用来被其它的文件调用
<a href="<?php echo $url;?>"><?php echo $title;?></a>

执行test.php文件以后,查看页面的源代码,内容如下:
<a href="http://gb.cri.cn/27824/2009/11/13/882s2675475.htm">从徐静蕾的网店看名人如何利用网络掘金</a>

实际上Zend Framework以前的版本中模板也是这么处理的,就是用PHP文件做模板,也就是模板中就是PHP的语法,现在的版本不知道是怎么处理的。

发布了430 篇原创文章 · 获赞 415 · 访问量 925万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览