ThinkPHP中有很多重要的函数,其中大部分是单字母函数,这些函数在开发体验中发挥了重大的作用。为了能方便大家学习和掌握,在这里汇总下ThinkPHP中的经典函数用法,无论你是资深还是菜鸟TPer,绝对不容错过哦^_^A函数:实例化控制器R函数:直接调用控制器的操作方法C函数:设置和获取配置参数L函数:设置和获取语言变量D函数:实例化模型M函数:实例化模型(无需定义模型类)N函数:计数器G函数:调试统计U函数:URL地址生成I函数:安全获取系统输入变量S函数:缓存设置和存取F函数:快速缓存设置和存取session函数:Session操作cookie函数:Cookie操作import函数:类库导入ThinkPHP函数详解:A方法A方法用于在内部实例化控制器,调用格式:A('[项目://][分组/]模块','控制器层名称')最简单的用法:1.$User=A('User');表示实例化当前项目的UserAction控制器(这个控制器对应的文件位于Lib/Action/UserAction.class.php),如果采用了分组模式,并且要实例化另外一个Admin分组的控制器可以用:1.$User=A('Admin/User');也支持跨项目实例化(项目的目录要保持同级)1.$User=A('Admin://User');表示实例化Admin项目下面的UserAction控制器3.1版本增加了分层控制器的支持,所以还可以用A方法实例化其他的控制器,例如:1.$User=A('User','Event);实例化UserEvent控制器(对应的文件位于Lib/Event/UserEvent.class.php)。实例化控制器后,就可以调用该控制器中的方法,不过需要注意的情况是,在跨项目调用的情况下,如果你的操作方法有针对当前控制器的特殊变量操作,会有一些未知的问题,所以,一般来说,官方建议需要公共调用的控制器层单独开发,不要有太多的依赖关系。ThinkPHP函数详解:R方法R方法用于调用某个控制器的操作方法,是A方法的进一步增强和补充。R方法的调用格式:R('[项目://][分组/]模块/操作','参数','控制器层名称')例如,我们定义了一个操作方法为:1.classUserActionextendsAction{2.publicfunctiondetail($id){3.returnM('User')-find($id);4.}5.}那么就可以通过R方法在其他控制器里面调用这个操作方法(一般R方法用于跨模块调用)1.$data=R('User/detail',array('5'));表示调用User控制器的detail方法(detail方法必须是public类型),返回值就是查询id为5的一个用户数据。如果你要调用的操作方法是没有任何参数的话,第二个参数则可以留空,直接使用:1.$data=R('User/detail');也可以支持跨分组和项目调用,例如:1.R('Admin/User/detail',array('5'));表示调用Admin分组下面的User控制器的detail方法。1.R('Admin://User/detail',array('5'));表示调用Admin项目下面的User控制器的detail方法。官方的建议是不要在同一层多太多调用,会引起逻辑的混乱,被公共调用的部分应该封装成单独的接口,可以借助3.1的新特性多层控制器,单独添加一个控制器层用于接口调用例如,我们增加一个Api控制器层,1.classUserApiextendsAction{2.publicfunctiondetail($id){3.returnM('User')-find($id);4.}5.}然后,使用R方法调用1.$data=R('User/detail',array('5'),'Api');也就是说,R方法的第三个参数支持指定调用的控制器层。同时,R方法调用操作方法的时候可以支持操作后缀设置C('ACTION_SUFFIX'),如果你设置了操作方法后缀,仍然不需要更改R方法的调用方式。ThinkPHP函数详解:C方法C方法是ThinkPHP用于设置、获取,以及保存配置参数的方法,使用频率较高。了解C方法需要首先了解下ThinkPHP的配置,因为C方法的所有操作都是围绕配置相关的。ThinkPHP的配置文件采用PHP数组格式定义。由于采用了函数重载设计,所以用法较多,我们来一一说明下。设置参数1.C('DB_NAME','thinkphp');表示设置DB_NAME配置参数的值为thinkphp,由于配置参数不区分大小写,所以下面的写法也是一样:[-more-]1.C('db_name','thinkphp');但是建议保持统一大写的配置定义规范。项目的所有参数在未生效之前都可以通过该方法动态改变配置,最后设置的值会覆盖前面设置或者惯例配置里面的定义,也可以使用参数配置方法添加新的配置。支持二级配置参数的设置,例如:1.C('USER.USER_ID',8);配置参数不建议超过二级。如果要设置多个参数,可以使用批量设置,例如:1.$config['user_id']=1;2.$config['user_type']=1;3.C($config);如果C方法的第一个参数传入数组,就表示批量赋值,上面的赋值相当于:1.C('USER_ID',1);2.C('USER_TYPE',1);[-more-]获取参数要获取设置的参数,可以用:1.$userId=C('USER_ID');2.$userType=C('USER_TYPE');如果USER_ID参数尚未定义过,则返回NULL。也可以支持获取二级配置参数,例如:1.$userId=C('USER.USER_ID');如果传入的配置参数为空,表示获取全部的参数:1.$config=C();保存设置3.1版本增加了一个永久保存设置参数的功能,仅针对批量赋值的情况,例如:1.$config['user_id']=1;2.$config['user_type']=1;3.C($config,'name');在批量设置了config参数后,会连同当前所有的配置参数保存到缓存文件(或者其他配置的缓存方式)。保存之后,如果要取回保存的参数,可以用1.$config=C('','name');其中name就是前面保存参数时用的缓存的标识,必须一致才能正确取回保存的参数。取回的参数会和当前的配置参数合并,无需手动合并。ThinkPHP函数详解:L方法L方法用于启用多语言的情况下,设置和获取当前的语言定义。调用格式:L('语言变量'[,'语言值'])设置语言变量除了使用语言包定义语言变量之外,我们可以用L方法动态设置语言变量,例如:1.L('LANG_VAR','语言定义');语言定义不区分大小写,所以下面也是等效的:1.L('lang_var','语言定义');不过规范起见,我们建议统一采用大写定义语言变量。L方法支持批量设置语言变量,例如:1.$lang['lang_var1']='语言定义1';2.$lang['lang_var2']='语言定义2';3.$lang['lang_var3']='语言定义3';4.L($lang);表示同时设置3个语言变量lang_var1lang_var2和lang_var3。[-more-]获取语言变量1.$langVar=L('LANG_VAR');或者:1.$langVar=L('lang_var');如果参数为空,表示获取当前定义的全部语言变量(包括语言定义文件中的):1.$lang=L();或者我们也可以在模板中使用1.{$Think.lang.lang_var}来输出语言定义。ThinkPHP函数详解:D方法从本篇开始,我们会陆续给大家详细说明下框架内置函数的用法。D方法D方法应该是用的比较多的方法了,用于实例化自定义模型类,是ThinkPHP框架对Model类实例化的一种封装,并实现了单例模式,支持跨项目和分组调用,调用格式如下:D('[项目://][分组/]模型','模型层名称')方法的返回值是实例化的模型对象。D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化Model基类,同时对于已实例化过的模型,不会重复去实例化。D方法最常用的用法就是实例化当前项目的某个自定义模型,例如:1.//实例化User模型2.$User=D('User');会导入当前项目下面的Lib/Model/UserModel.class.php文件,然后实例化UserModel类,所以,实际上的代码可能和下面的等效:1.import('@.Model.UserModel');2.$User=newUserModel();但是如果使用D方法的话,如果这个UserModel类不存在,则会自动调用1.newModel('User');并且第二次调用的时候无需再次实例化,可以减少一定的对象实例化开销。D方法可以支持跨分组和项目实例化模型,例如:1.//实例化Admin项目的User模型2.D('Admin://User')3.//实例化Admin分组的User模型4.D('Admin/User')注意:要实现跨项目调用模型的话,必须确保两个项目的目录结构是并列的。3.1版本开始,由于增加了分层模型的支持,所以D方法也可以实例化其他的模型,例如:1.//实例化UserService类2.$User=D('User','Service');3.//实例化UserLogic类4.$User=D('User','Logic');5.D('User','Service');会导入Lib/Service/UserService.class.php,并实例化,等效于下面的代码:1.import('@.Service.UserService');2.$User=newUserSerivce();ThinkPHP函数详解:M方法M方法用于实例化一个基础模型类,和D方法的区别在于:1、不需要自定义模型类,减少IO加载,性能较好;2、实例化后只能调用基础模型类(默认是Model类)中的方法;3、可以在实例化的时候指定表前缀、数据库和数据库的连接信息;D方法的强大则体现在你封装的自定义模型类有多强,不过随着新版ThinkPHP框架的基础模型类的功能越来越强大,M方法也比D方法越来越实用了。M方法的调用格式:M('[基础模型名:]模型名','数据表前缀','数据库连接信息')我们来看下M方法具体有哪些用法:1、实例化基础模型(Model)类在没有定义任何模型的时候,我们可以使用下面的方法实例化一个模型类来进行操作:1.//实例化User模型2.$User=M('User');3.//执行其他的数据操作4.$User-select();这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。1.$User=M('User');其实等效于:1.$User=newModel('User');表示操作think_user表。M方法和D方法一样也有单例功能,多次调用并不会重复实例化。M方法的模型名参数在转换成数据表的时候会自动转换成小写,也就是说ThinkPHP的数据表命名规范是全小写的格式。2、实例化其他公共模型类第一种方式实例化因为没有模型类的定义,因此很难封装一些额外的逻辑方法,不过大多数情况下,也许只是需要扩展一些通用的逻辑,那么就可以尝试下面一种方法。1.$User=M('CommonModel:User');改用法其实等效于:1.$User=newCommonModel('User');因为系统的模型类都能够自动加载,因此我们不需要在实例化之前手动进行类库导入操作。模型类CommonModel必须继承Model。我们可以在CommonModel类