下面将分别对常用的扩展函数进行讲解。最终将会得到“一个多字节安全的substr()操作基础上的字...”,读者可以在此基础上继续完善msubstr函数。build_count_rand函数返回的结果是关联数组,在实际应用开发中,可以将结果循环插入数据库等。byte_format函数通常用于上传文件检测,或者统计用户使用空间大小等。......
2023-11-04
系统基础函数库是确保系统能够正常运行的关键,当然在项目中调用系统的基础函数也是被允许的,接下来将分别介绍几个内置的高效基础函数。
1.file_exists_case(检查文件)
file_exists_case函数是is_file的封装函数。is_file是PHP内置的一个基础函数,该函数用于检测指定的文件是否存在,如果存在则返回true否则返回false。但是is_file函数在检测文件时是不区分大小写的,file_exists_case函数对is_file函数进行了封装,在检测文件时将区分大小写。file_exists_case格式如下所示。
file_exists_case($filename)
参数filename表示文件的路径(从入口文件开始算起)。使用方式如以下代码所示。
需要注意的是,file_exists_case只能实现在Windows系统下区分大小写,在非Windows下是无效的。与file_exists_case函数相似功能的还有file_exists函数,该函数是PHP内置的一个标准函数,但据公开的资料显示file_exists与is_file性能相差10倍以上(is_file性能较高)。
2.require_cache(包含文件)
require_cache函数是require_once的封装。require_once是一个用于包含文件的PHP基础函数,该函数是PHP 5.x新增加的,用于避免重复的include引用导致程序崩溃。require_once在引入文件时,对环境变量的检测是不严谨的。最典型的就是在Windows系统下,require_once不检测文件大小写,导致程序移植到Linux等系统时运行出错。require_cache函数使用file_exists_case函数来检测文件,能够避免因大写小造成的错误。require_cache函数格式如下所示。
require_cache($filename)
参数filename表示文件的路径(从入口文件开始算起)。如以下代码所示。
3.import(导入类)
import函数用于导入系统基础类库、应用类库的常用函数。import参考了Java编程中的import文件导入机制,并且也使用命名空间的方式进行导入。所谓的命名空间,事实上是相对于框架本身而言的,与Java或者PHP内置的命名空间不是一回事。import命名空间导入格式下所示。
import($class,$baseUrl='',$ext='.class.php')
其中class参数表示类名,类名必须要与文件名(不带.class.php后缀)一致,这是ThinkPHP的文件命名规范;baseUrl参数表示基础类库,即引入的类文件路径从该目录开始算起;ext参数表示类文件后缀名。这里需要重点理解的是class参数值,该参数值使用命名空间的方式来表示,如以下代码所示。
其中Think是标识符,Util表示命名空间,Session表示类库。中间的分隔符“.”与“/”相等。在import函数中,标识符是一个很重要的概念,只有系统能够辨认的标识符,该基础类才能被导入。否则系统将会尝试导入当前项目下的类库。系统一共提供了4个标识符号,分别代表不同位置的类库,如表9-6所示。
表9-6 import函数导入类标识符
上述代码的最终路径为/ThinkPHP/Lib/Util/Session.class.php。假设将import("Think.Util.Session")改为import("Page.Util.Session"),那么路径将变为/home/../Page/Lib/Util/Session.class.php。这是因为Page并非标识符,当系统遇到非标识符时,会将路径定位到当前项目根目录下。同样,修改了参数baseUrl系统将首先定位系统根目录(与入口文件平级),然后定位到baseUrl指定的目录下。需要注意的是baseUrl参数值不能同时与“@”标识符同在。
ext参数用于导入第三方扩展是非常有用的,因为它可以修改默认的.class.php类文件后缀名。例如有一个第三方的类,命名为Page.php,如果继续使用默认的导入方式显然是失败的,此时可以通过下述两种方式实现类库的导入。(www.chuimin.cn)
上述代码导入结果都是相同的。最终的文件路径为./home/Lib/Util/Page.php。前者通过修改ext参数实现;后者通过使用“#”替代符号实现。“#”替代符号是系统用于代替“.”文件后缀符号的,这样就可以避免因命名空间与非.class.php后缀名文件造成的冲突。
虽然使用import能够实现导入第三方类库,但系统同时提供了vendor函数,该函数在导入第三方类库时更加规范与便捷。
4.vendor(导入第三方类)
前面提到过,使用import可以导入任意类文件。事实上vendor函数也只是对import函数的封装,这种封装是有针对性的,所以操作起来更加简单。为了便于文件的管理,系统的第三方扩展包都存放于ThinkPHP/Extend/Vendor目录,vendor函数就是直接定位到该目录下的,所以建议所有第三方类库或扩展包都放置于该目录下,以便进行统一管理。ThinkPHP默认情况下已经提供了多个扩展包,如下所示。
假设现在需要导入Smarty扩展包,使用vendor函数就能很方便地导入,如以下代码所示。
Vendor函数参数与import函数参数一样,同时也采用命名空间方式导入文件。上述代码最终得到的路径为./ThinkPHP/Extend/Vendor/Smarty/Smarty.php。
5.load(导入函数)
import和vendor函数在导入文件时都遵循命名空间的方式,load函数也用于导入文件,但与前面介绍的函数不同,load函数不遵循命名空间方式,并且后缀名默认不再是.class.php。从这个意义上来讲,load函数用于导入扩展函数文件是最合适的了。load函数格式如下所示。
load($name,$baseUrl='',$ext='.php')
其中参数name表示文件名称(不带后缀名);baseUrl为基目录,默认为/ThinkPHP/Extend/Function/;ext表示文件后缀名。
如果要导入的文件位于当前项目下,那么可以在baseUrl参数中进行指定,也可以使用“@”指定,如以下代码所示。
上述代码最终得到的路径为/home/Common/user.php。使用“@”符号首先定位到当前项目Common目录,Common正是用于存放自定义函数的目录。最后导入对应的文件名。
6.strip_whitespace(去除空白)
strip_whitespace函数可以对输入的数据进行优化和过滤。去除空白在PHP中有很多种方法可以实现,例如使用内置的函数、正则表达式替换等。但使用strip_whitespace函数不仅可以去除空白,还可以去除代码中的注释,最后将结果合并为一行数据,极大地压缩代码质量。系统编译(Runtime)代码时正是使用strip_whitespac函数实现的,开发人员也可以直接调用。
7.mk_dir(创建目录)
PHP内置的mk_dir函数能够方便地创建目录,ThinkPHP封装后的mk_dir函数用于实现在创建前对指定目录进行检测。如果目录存在则创建,否则将直接返回false,并且不会报错。
有关PHP MVC开发实战的文章
下面将分别对常用的扩展函数进行讲解。最终将会得到“一个多字节安全的substr()操作基础上的字...”,读者可以在此基础上继续完善msubstr函数。build_count_rand函数返回的结果是关联数组,在实际应用开发中,可以将结果循环插入数据库等。byte_format函数通常用于上传文件检测,或者统计用户使用空间大小等。......
2023-11-04
首先需要使用content方法连接上Memcached服务器,代码如下所示。接下来将继续使用Memcache成员方法对缓存数据库进行操作。stats cachedump:显示slabs指定范围内的缓存项,例如stats cachedump 0,3。......
2023-11-04
接下来将使用CodeIgniter实现一个简单的新闻列表,用户点击列表中的新闻标题将会进入新闻的正文页面,通过该例子演示CodeIgniter实现MVC开发的流程。在CodeIgniter中,控制器命名规则比较灵活,它不需要加前缀或后缀,一个普通的文件即可。......
2023-11-04
Json能够应用在许多场合,包括PHP本身就提供了对Json的反序列化操作。事实上,Json在传送大量数据时本身是存在溢出的,所以在设计时服务端要尽量避免输出大量Json数据。要达到前后台分离设计,使用Json通信最好不过了,因为主流的UI设计框架都对Json提供了完善的支持,下面将以Jquery为基础,详细介绍Ajax与Json的开发过程。由于使用Jsonp进行异步获取数据,所以Ajax异步通信变得简单。......
2023-11-04
ThinkPHP的模板引擎高效之处在于灵活的视图标签,熟悉这些标签的使用方式将能够提高视图模板的设计水平。接下来将从基本的创建视图开始,然后深入介绍默认视图引擎的使用。创建一个视图可分为以下几个步骤。需要注意的是,使用默认的{$}边界符,在视图模板中使用JavaScript等脚本时,有可能造成冲突。ThinkPHP内置了多种视图引擎,在默认情况下系统会使用内置的视图引擎,如果使用第三方的视图引擎,变量的分配方式会有所不同。......
2023-11-04
在数据库开发中,查询和插入数据是同等重要的,ThinkPHP对数据的插入、更新等都做了高度封装,系统提供create方法,用于创建数据对象。图7-2 create创建数据流程2.create数据操作前面介绍了create方法的运行过程,读者只需要理解即可,在实际应用开发中创建数据的过程是极其简单的。下面将结合示例代码,介绍create方法的实际应用,加深对create方法的认识。一切完成后,此时数据对象存放于内存中,使用add方法进行提交,完成整个create创建数据的过程。......
2023-11-04
图6-4 网站布局ThinkPHP 3.0之前的模板引擎没有布局的概念,但开发人员可以使用include包含文件达到网站布局的效果。布局文件允许嵌套,如果网站页面更加复杂,还可以结合include等标签实现开发需求。另外,如果不需要全局布局,也可以单独在当前页面中使用布局文件,只需要在当前页面头部加上
2023-11-04
上述XML代码共有两条新闻数据,通过浏览器直接访问将能够正确识别。由于DOM首先将XML载入内存,这就意味着在引擎还没最终输出结果前,开发人员可以对内存中的数据进行增、删、改,这也是DOM最为强大的功能。DOM查询XML前面使用ASX引擎能够方便地对XML数据进行查询,接下来将使用DOM进行同样的查询操作,帮助读者加深对DOM与SAX的认识。......
2023-11-04
相关推荐