首页 理论教育PHPMVC开发实战:有效的基础函数库与使用

PHPMVC开发实战:有效的基础函数库与使用

【摘要】:系统基础函数库是确保系统能够正常运行的关键,当然在项目中调用系统的基础函数也是被允许的,接下来将分别介绍几个内置的高效基础函数。is_file是PHP内置的一个基础函数,该函数用于检测指定的文件是否存在,如果存在则返回true否则返回false。require_once是一个用于包含文件的PHP基础函数,该函数是PHP 5.x新增加的,用于避免重复的include引用导致程序崩溃。

系统基础函数库是确保系统能够正常运行的关键,当然在项目中调用系统的基础函数也是被允许的,接下来将分别介绍几个内置的高效基础函数。

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表示文件的路径(从入口文件开始算起)。使用方式如以下代码所示。

978-7-111-42852-7-Part02-428.jpg

需要注意的是,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表示文件的路径(从入口文件开始算起)。如以下代码所示。

978-7-111-42852-7-Part02-429.jpg

3.import(导入类)

import函数用于导入系统基础类库、应用类库的常用函数。import参考了Java编程中的import文件导入机制,并且也使用命名空间的方式进行导入。所谓的命名空间,事实上是相对于框架本身而言的,与Java或者PHP内置的命名空间不是一回事。import命名空间导入格式下所示。

import($class,$baseUrl='',$ext='.class.php')

其中class参数表示类名,类名必须要与文件名(不带.class.php后缀)一致,这是ThinkPHP的文件命名规范;baseUrl参数表示基础类库,即引入的类文件路径从该目录开始算起;ext参数表示类文件后缀名。这里需要重点理解的是class参数值,该参数值使用命名空间的方式来表示,如以下代码所示。

978-7-111-42852-7-Part02-430.jpg

其中Think是标识符,Util表示命名空间,Session表示类库。中间的分隔符“.”与“/”相等。在import函数中,标识符是一个很重要的概念,只有系统能够辨认的标识符,该基础类才能被导入。否则系统将会尝试导入当前项目下的类库。系统一共提供了4个标识符号,分别代表不同位置的类库,如表9-6所示。

表9-6 import函数导入类标识符

978-7-111-42852-7-Part02-431.jpg

上述代码的最终路径为/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)

978-7-111-42852-7-Part02-432.jpg

上述代码导入结果都是相同的。最终的文件路径为./home/Lib/Util/Page.php。前者通过修改ext参数实现;后者通过使用“#”替代符号实现。“#”替代符号是系统用于代替“.”文件后缀符号的,这样就可以避免因命名空间与非.class.php后缀名文件造成的冲突。

虽然使用import能够实现导入第三方类库,但系统同时提供了vendor函数,该函数在导入第三方类库时更加规范与便捷。

4.vendor(导入第三方类)

前面提到过,使用import可以导入任意类文件。事实上vendor函数也只是对import函数的封装,这种封装是有针对性的,所以操作起来更加简单。为了便于文件的管理,系统的第三方扩展包都存放于ThinkPHP/Extend/Vendor目录,vendor函数就是直接定位到该目录下的,所以建议所有第三方类库或扩展包都放置于该目录下,以便进行统一管理。ThinkPHP默认情况下已经提供了多个扩展包,如下所示。

978-7-111-42852-7-Part02-433.jpg

假设现在需要导入Smarty扩展包,使用vendor函数就能很方便地导入,如以下代码所示。

978-7-111-42852-7-Part02-434.jpg

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参数中进行指定,也可以使用“@”指定,如以下代码所示。

978-7-111-42852-7-Part02-435.jpg

上述代码最终得到的路径为/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,并且不会报错。