本文实例讲述了阿维斯陀经注解框架过滤器Zend_Filter用法。分享给大家供大家参考,具体如下:
引言:过滤器是对输入内容进行过滤,清除其中不符合过滤规则的内容,并将其余内容返回的过程。
阿维斯陀经注解中有个Zend_Filter组件用来实现过滤的功能。其中有个Zend _ Filter _接口子类,该子类为实现一般过滤器提供了接口。
要实现过滤器类,需要实现该接口中一个名为过滤器()的方法。
下面通过实例来演示如何使用Zend_Filter中定义的过滤器,该例演示如何实现字母转小写的功能。
代码:
?PHP需要_ once ' Zend/Filter/StringToLower。PHP ';//加载子类$ Filter=new Zend _ Filter _ StringToLower;//实例化对象$ temp1=' ABCDefGH//定义待过滤内容$temp2='我爱《南京》;"回声"内容:'.$temp1 .p经过滤后为:';echo $ filter-filter($ temp 1);回声“p”;"回声"内容:'.$temp2 .p经过滤后为:';echo $ filter-filter($ temp 2);结果:
内容:ABCDefGH经过滤后为:abcdefgh内容:我爱南京经过滤后为:我爱南京
为什么如此神奇呢?不禁让我想探索一下其内部的构造!下面来研读一下其内部的工作原理。
类Zend_Filter_StringToLower为输入字符串实现Zend_Filter_Interface{ /** *编码* * @ var string */protected $ _ Encoding=null;/** *构造函数* * @ param string | array | Zend _ Config $ options OPTIONAL */public function _ _ construct $(options=null){ if($ Zend _ Config的options实例){ $ options=$ options-to array();} else if(!is _ array($ options)){ $ options=func _ get _ args();$ temp=array();if(!empty($ options)){ $ temp[' encoding ']=array _ shift($ options);} $ options=$ temp} if(!array_key_exists('encoding ',$ options)function _ exists(' MB _ internal _ encoding '){ $ options[' encoding ']=MB _ internal _ encoding();} if (array_key_exists('encoding ',$ options)){ $ this-setEncoding($ options[' encoding ']);} } /** *返回设置的编码* * @返回字符串*/public函数getEncoding(){ return $ this-_ encoding;} /** *为给定字符串设置输入编码* * @ param字符串$编码* @返回Zend_Filter_StringToLower提供流畅的接口* @抛出Zend_Filter_Exception */公共函数setEncoding($ encoding=null){ if($ encoding!==null) { if(!function _ exists(' MB _ strtolow '){ require _ once ' Zend/Filter/exception。PHP ';抛出新的Zend_Filter_Exception('此功能需要mbstring ');} $encoding=(字符串)$编码;if(!in _ array(strtolow($ encoding),array _ map(' strtolow ',MB _ list _ encodings()))){ require _ once ' Zend/Filter/Exception。PHP ';引发新的Zend_Filter_Exception('给定的编码$encoding '不受mbstring支持');} } $ this-_ encoding=$ encoding;返回$ this} /***由Zend _ Filter _接口定义* *返回字符串$值,根据需要将字符转换为小写* * @ param字符串$值* @返回字符串*/公共函数Filter($ value){ if($ this-_ encoding!==null){返回MB _ strtolow((字符串)$ value,$ this-_ encoding);}返回strtolower((字符串)$ value);}}研读:
源代码意思大概是先实现Zend _ Filter _接口接口。
定义一个私有变量$ _编码,初始值为null,一般私有变量都是以_下划线开头。
然后通过构造函数进行初始化工作,设置编码。
至于这个encoing属性是作何用的,我就不大清楚了,反正为了它,源码写了不少代码。
类中有三个方法,一个是setEncoding,一个是getEncoding,一个主要功能的过滤器。有两个方法都是为了编码来写的。
在构造函数中使用setEncoding方法,并直接使用$this-setEncoding()。你可以设定私有财产的价值。
然后根据私有财产的内容,选择用什么方法让字母小写。
我去。这门课要考虑的事情太多了。实际上,核心代码就是这两句话,strtolow((string)$ value)。
这个类太酷了,我从来没有用过私有属性。考虑问题不如作者全面,考虑各种验证,各种情况。例如,
从建造师身上,我们可以看到他考虑的全面性。
if($ options instance of Zend _ Config){ $ options=$ options-to array();} else if(!is _ array($ options)){ $ options=func _ get _ args();$ temp=array();if(!empty($ options)){ $ temp[' encoding ']=array _ shift($ options);} $ options=$ temp}if(!array_key_exists('encoding ',$ options)function _ exists(' MB _ internal _ encoding '){ $ options[' encoding ']=MB _ internal _ encoding();}if (array_key_exists('encoding ',$ options)){ $ this-setEncoding($ options[' encoding ']);}总的来说,是值得敬佩的。
我们来谈谈过滤链。它的功能是将多个过滤器串联起来相互配合。过滤器链是多个过滤器的连接。过滤指定内容时,
每个过滤器将按其顺序进行过滤或转换。当所有过滤操作完成时,过滤链返回最终的过滤结果。
听起来很有趣!
具体实施步骤是什么?
首先,为类Zend_Filter实例化一个对象,然后通过该实例的addFilter()方法将一个过滤器添加到过滤器链中。
下面的示例演示如何使用筛选器链多次筛选和转换数据。
代码:
?phprequire _ once ' Zend/Filter . PHP ';//加载Zend_Filter类require _ once ' Zend/Filter/alpha . PHP ';//加载Zend_Filter_Alpha子类require _ once ' Zend/Filter/stringToupper . PHP ';//Load Zend _ Filter _ StringToUpper子类$ Filter chain=new Zend _ Filter();//创建筛选器链$ filter chain-addfilter(new Zend _ filter _ alpha(')-addfilter(new Zend _ filter _ stringtoupper());//将筛选器$temp1='12345asdf67asdfasdf '添加到筛选器链中;$ temp 2='#$%^[emailprotected]';$temp3='欢迎来到北京';回显“内容:”。$temp1。p被筛选为:“;echo $ filter chain-filter($ temp 1);回声“p”;回显“内容:”。$temp2。p被筛选为:“;echo $ filter chain-filter($ temp 2);回声“p”;回显“内容:”。$ tem3。p被筛选为:“;echo $ filter chain-filter($ temp 3);回声“p”;结果:
过滤后的内容:12345asdf67asdfasdf为:ASDFASDFASDF内容3360 # $ :#$%^[emailprotected]]为:FFFFF内容:过滤后欢迎来到北京:欢迎来到北京
分析:
这里的Alpha非常强大,过滤数字和特殊字符,甚至空格。幸运的是,在初始化时,我添加了一个参数“”,它保留了空格。
为什么这么神奇?
这是核心代码
公共函数过滤器($ value){ $空白=$ this-allowhitespace? s“:”;if(!self : $ _ unicodeenabled){//不支持POSIX命名类,请使用替代a-zA-Z match $pattern='/[^a-zA-Z'。$空白。']/';} else if(self : $ _ meansEnglishAlphabet){//Alphabet的意思是英文字母。$模式='/[^a-zA-Z'。$空白。]/u ';} else {//字母表意味着每种语言的字母表。$模式='/[^p{L}'。$空白。]/u ';}返回preg_replace($pattern ' ',(string)$ value);}分析:过滤这里的内容,如果不是字母或者空格,全部去掉。使用的php方法是preg_replace。此外,还使用了正则表达式。[a-za-z]表示其他字符。
这里的$空白成员属性是在初始化期间设置的。具体代码如下:
public function _ _ construct($ allo space=false){ if($ Zend _ Config的allo space实例){ $ allo space=$ allo space-to array();} else if(is _ array($ allo空格)){ if(array _ key _ exists(' allo空格',$ allo空格)){ $空格=$空格[' allo空格'];} else { $ allowhitespace=false } } $ this-allow space=(布尔值)$ allowhitespaceif(null===self : $ _ unicodeEnabled){ self : $ _ unicodeEnabled=(@ preg _ match '/ Pl/u ',' a ')?真:假;} if(null===self : $ _ meansEnglishAlphabet){ $ this-_ Locale=new Zend _ Locale(' auto ');self : $ _ meansEnglishAlphabet=in _ array($ this-_ locale-getLanguage(),array('ja ',' ko ',' zh ');}}此外,还有两个方法来设置是否允许有空格和获取是否设置了允许空格。
/***返回allo空格选项* * @返回布尔值*/public函数getallowbalances(){ return $ this-allo space;}/***设置allo空格选项* * @ param boolean $空格* @返回Zend _ Filter _ Alpha提供流畅的接口*/public函数setallowerspaces($ allowerspaces){ $ this-allowerspaces=(布尔值)$ allowerspaces;返回$ this}剖析完之后,我们似乎就更了解它的构造了,就是使用正则过滤而已。同时通过属性allowWhiteSpace来控制是否过滤空格。
刚才介绍了两种过滤器,一个是StringToUpper,一个是阿尔法,下面再介绍其它的一些过滤器。
首先是阿尔努姆,过滤非数字和非字母的内容,执行过滤器()方法,将返回纯数字与字母的内容,它是Zend_Filter_Alpha(过滤非字母)与Zend_Filter_Digits(过滤非数值)的并集。
具体的例子就不举了,都差不多。
我们来看看它内部的构造,
公共函数过滤器($ value){ $空白=$ this-allo空格? s“:”;if(!self : $ _ unicodeenabled){//不支持可移植性操作系统接口命名类,请使用备选a-za-z0-9匹配$ pattern='/[^a-za-z0-9'。$空白。']/';} else if(self : $ _ meansEnglishAlphabet){//Alphabet的意思是英文字母。$模式='/[^a-zA-Z0-9'。$空白)/u ';} else {//字母表意味着每种语言的字母表。$模式='/[^p{L}p{N}'。$空白)/u ';}返回preg_replace($pattern ' ',(string)$ value);}通过正则过滤除字母和数字之外的内容。
下面出场的是超文本标记语言实体过滤器。
代码:
?PHP需要_ once ' Zend/Filter/Htmplenties。PHP ';$ Filter=new Zend _ Filter _ HtmlEntities();$temp1='img src=' ./1 .png ' width=' 100px$ temp 2='按钮AAA/按钮';$ temp3=欢迎来到北京/h1 ';"回声"内容:'.$temp1 .p经过过滤为:';echo $ filter-filter($ temp 1);回声“p”;"回声"内容:'.$temp2 .p经过过滤为:';echo $ filter-filter($ temp 2);回声“p”;"回声"内容: '温度3美元p .经过过滤为:';echo $ filter-filter($ temp 3);回声“p”;结果:
通过结果,我们看出它将超文本标记语言内容还原成原始代码了。由于该过滤器是对函数html文件的后缀实体进行的封装,所以遵循该函数的规则。即将""与""分别转换为""与"",经过这样的转换,
相应的超文本标记语言内容就变成了以其原始格式显示的字符串。
更多关于古波斯语相关内容感兴趣的读者可查看本站专题: 《Zend FrameWork框架入门教程》 、 《php优秀开发框架总结》 、 《Yii框架入门及常用技巧总结》 、 《ThinkPHP入门教程》 、 《php面向对象程序设计入门教程》 、 《php+mysql数据库操作入门教程》 及《php常见数据库操作技巧汇总》
希望本文所述对大家基于阿维斯陀经注解框架框架的服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。