系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
系统扩展函数库能够增强系统的基础特性,在使用时需要使用Load('extend')快捷方法引入扩展函数库。下面将分别对常用的扩展函数进行讲解。
1.auto_charset(自动编码)
auto_charset基础函数封装了iconv函数,能够对gbk、gb232或者utf-8等数据进行相互编码,auto_charset是系统扩展函数,使用时需要额外引入,格式如下所示。
auto_charset($fContents,$from='gbk',$to='utf-8')
其中参数fContents表示需要进行编码的数据;from参数表示当前数据编码类型;to参数表示需要转换的目标编码,常用参数值有gbk、gb2312、utf-8等。下面将使用一个例子示范auto_charset函数的使用,如以下代码所示。
在ThinkPHP中,文件编码必须使用UTF8,所以当前页面中的数据也是utf-8编码。使用auto_charset函数将utf-8转换为gbk后,如果不显式指定charset为gbk,浏览器仍然使用utf-8模式来处理当前页面输出,这样的后果显然是错误的(中文出现乱码)。
2.is_utf8(检测是否UTF8编码)
由于系统只支持UTF8编码的文件,所以当数据不是UTF8编码时,将不能够正确处理。这时可以使用is_utf8函数对数据进行检测,如果不是utf-8编码时,使用前面介绍过的auto_charset函数转换。is_utf8函数格式如下所示。
is_utf8($string)
下面通过一个示例演示is_utf8扩展函数的使用,代码如下所示。
3.msubstr(中文截取)
PHP内置了众多字符串处理的函数,对字符串进行截取的有substr、mb_substr、mb_strcut、str_replace等,当然还有强大的正则表达式。除了正则表达式之外,PHP内置的字符截取函数对中文的支持都是不完善的,msubstr利用了PHP正则及mb_substr函数,实现了对中文字符串的精确截取。msubstr函数格式如下所示。
msubstr($str,$start=0,$length,$charset="utf-8",$suffix=true)
其中参数str表示需要截取的字符串,支持英文、数字、中文(简体或繁体);参数start表示截取的开始位置;length表示截取的最后一个字符位置,默认为不限制,即一直到字符串最后一个字符;charset表示截取的字符串编码;参数suffix为true时把截取剩余部分用“…”代替。下面通过示例演示msubstr函数的使用,代码如下所示。
最终将会得到“一个多字节安全的substr()操作基础上的字...”,读者可以在此基础上继续完善msubstr函数。例如修改截取后缀字符“…”等。
4.rand_string(随机生成密码)
PHP内置的rand函数可以方便地随机生成数字字符串。rand_string对rand函数进行了封装,不仅实现了纯数字随机、字母随机、数字与字母混合随机,还实现了中文字符随机、中文与英文混合随机等。rand_string通常用于自动生成密码,但也可以用于需要自动生成字符的场景,例如验证码、安全问答话题等。rand_string函数格式如下。
rand_string($len=6,$type='',$addChars='')
其中参数len表示随机生成字符串的位数;参数type表示随机字符串的类型,共支持6种类型;addChars表示额外字符(即后缀)。下面对过示例演示rand_string函数的使用,代码如下所示。
在实际应用开发中,通常需要修改参数type,改变该参数的值,将直接影响到随机字符串的形式。type参数有效值由0~5组成,如表9-7所示。(www.chuimin.cn)
表9-7 type参数值
5.build_count_rand(批量生成随机字符串)
rand_string函数一次只能生成一串字符串,build_count_rand函数是基于rand_string函数的,但build_count_rand函数实现了批量生成随机字符串,并将结果保存到数组中。build_count_rand函数格式如下所示。
build_count_rand($number,$length=4,$mode=1)
参数number表示随机批量生成的字符串数量;参数length表示字符串的长度;model参数与rand_string函数中的type参数相同。build_count_rand函数使用非常简单,如以下代码所示。
build_count_rand函数返回的结果是关联数组,在实际应用开发中,可以将结果循环插入数据库等。build_count_rand函数通常用于批量生成优惠劵、虚拟金币等。
6.byte_format(字节格式化)
byte_format一个格式化计算机容量单位的函数。默认情况下,计算机都是以byte(B)为单位的,但对用户而言显然是不友好的,一个普通的网络文件少则几十KB;大的几十MB甚至几百MB。这种情况下就需要对网络文件容量单位进行格式化。byte_format函数可以实现对byte自动格式化为B、KB、MB、GB、TB、PB,对一般的网站而言,最常见的为KB及MB。byte_format函数格式如下。
byte_format($size,$dec=2)
其中参数size表示要转换byte数据大小,1024byte约等于1KB;参数dec表示四舍五入位数。下面通过示例演示byte_format函数的使用,代码如下所示。
上述代码结果将显示“1 GB”。需要注意的是byte_format在Windows平台与Linux等平台格式化结果有所差异(Linux平台以1000byte为基础运算单位)。byte_format函数通常用于上传文件检测,或者统计用户使用空间大小等。
7.highlight_code(代码加亮)
在一些需要原生代码演示的文章系统中,经常需要嵌入高亮代码,并且需要保持代码原有的格式、字体颜色、行号等。传统的做法是先将代码使用htmlspecialchars转义,然后保存到数据库中,取出时再使用htmlspecialchars_decode函数反转义,最后使用HTML标记<pre>原格式输出(还需要结合正则替换)。
使用highlight_code函数输出原代码格式,将变得简单,该函数所接收的代码数据即为最终呈现的代码格式。不仅如此,highlight_code函数还支持直接传入文件路径,返回该文件原生代码。highlight_code函数格式如下所示。
highlight_code($str,$show=false)
参数str表示原生格式代码;参数show表示是否直接输出,为true时返回值,不输出。下面通过示例代码演示highlight_code函数的使用,代码如下所示。
上述代码最终运行结果如图9-6所示。
图9-6 highlight_code高亮代码效果
有关PHP MVC开发实战的文章
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
前面介绍过,系统内置的行为是系统正常执行的基础,所以开发人员不需要改动这些扩展。事实上系统已经提供了一系列行为扩展,在项目中使用时,直接配置即可。配置项LIMIT_REFLESH_TIMES表示刷新的间隔,以秒为单位。......
2023-11-04
ThinkPHP的一大特点就是扩展灵活,同样行为也是可以自定义扩展的。接下来将深入介绍自定义行为扩展的实现。上述代码是一个名为AutoCheckUserLogin的自定义行为类。最后还需要确保自定义行为类继承于Behavior基类。事实上,AutoCheckUserLogin配置项并不是必需的,也就是说在配置时,自定义行为就已经能够正常运行了,配置项只不过用于实现灵活的配置。此时,再次访问项目,只有Index控制器下的页面受AutoCheckUserLogin自定义行为影响,其他页面则不受影响。......
2023-11-04
系统基础函数库是确保系统能够正常运行的关键,当然在项目中调用系统的基础函数也是被允许的,接下来将分别介绍几个内置的高效基础函数。is_file是PHP内置的一个基础函数,该函数用于检测指定的文件是否存在,如果存在则返回true否则返回false。require_once是一个用于包含文件的PHP基础函数,该函数是PHP 5.x新增加的,用于避免重复的include引用导致程序崩溃。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
在网站开发中处理时间日期数据是比较烦琐的工作,例如计划日期时差、日期转星期、指定日期倒计时等。系统内置了Date扩展类,能够让日期数据处理变得快捷、简单。上述代码运行结果为“1.4246575342466”,即1.4年。其中参数time表示与构造函数日期比较的日期数据;参数precision表示结果精度。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
Zend Studio在6.0之前采用独立安装包进行发行。下面分别对经典的Zend Studio 5.5和成熟的Zend Studio 8.0进行讲解,方便读者选择。Zend Studio 8.0是Zend推出的商业套件,开发者或企业必须要购买商业许可才能进行使用。......
2023-11-04
相关推荐