background image

PHP

笔记 在 smarty 中调用 php 内置函数的方法

在 smarty 中调用 php 的内置函数,相信很多人都不是很很了解 smarty 的一个重要功能,就是
能在 smarty 模板里面调用 php 的内置函数
相信有很多朋友还不知道,可以在 smarty 模板里调用 php 的内置函数,我们一起来看看
它的用法。
模板书写: 
{'param1'|functionName:'param2':'param3'} 
 
php 函数原型: 

echo

 functionName('param1','param2','param3'); 

实例: 
{'1234567'|

substr

:'1':'2'}

 

下面这个和函数的参数顺序有关系
 
{'a'|

str_replace

:'A':'abcd'}

 
直接延伸到,直接在 php 中写一个函数调用,不需要注册修改器的.
 
更深一步的研究:发现数组会出错.
分配了一个数组

array

给 Smarty,假设 Smarty 的分界符为'{' 和'}'。

在很多资料上都看到,在 Smarty 中要求数组的长度时,可以用在数组后便加|

count

的方

法调用。即通过{

array

|

count

}

 

获得

array

的长度。但是今天在写模板时,发现这样得不到数

组的长度,而只是得到一个返回的字符串 Array。也就是说仅仅是返回了{

array

}的结果,

 

而没有返回其

array

 

的长度。

查看 smarty\plugins 文件夹,发现并没有

count

的相关方法,也就是说,

count

是直接调用

了 php 中的方法。
后来通过网络上的资料,发现可以在

count

前面加@,从而正确的获取数组的长度。再进

一步查看 Smarty 的源码,发现 Smarty

 

对属性调节器后边的 方法名进行处理时,会对前

边加@的进行特殊处理。因此作出判断:在 Smarty 中的属性调节器中调用 php 中定义好的
函数时,可以通过加@

 

来表示。

1、对类型为数组的方法进行测试时,发现不加@符号都会出错。比如:要对一个数组调用

count

方法求出数组的长度,就可以这样调用{

array

|@

count

},而要对数组调用

end

方法得

出数组的最后一组数据时,则可以通过{

array

|@

end

}

 

2、在对字符串的相关函数进行测试,发现加不加@

 

都可以正常的调用。

3、其他的尚未认真测试。
对于在 smarty 中调用复杂的 php 函数不予鼓励,因为 Smarty 的本意就是要实现代码和模
板分离,不要偏离了人家的设计初衷。