Thinkphp单字母函数使用指南(2)

// 实例化User模型
$User = D('User');


会导入当前项目下面的Lib/Model/UserModel.class.文件,然后实例化UserModel类,所以,实际上的代码可能和下面的等效:

复制代码 代码如下:

import('@.Model.UserModel');
$User = new UserModel();


但是如果使用D方法的话,如果这个UserModel类不存在,则会自动调用

复制代码 代码如下:

new Model('User');


并且第二次调用的时候无需再次实例化,可以减少一定的对象实例化开销。
D方法可以支持跨分组和项目实例化模型,例如:

复制代码 代码如下:

//实例化Admin项目的User模型
D('Admin://User')
//实例化Admin分组的User模型
D('Admin/User')


注意:要实现跨项目调用模型的话,必须确保两个项目的目录结构是并列的。
.1版本开始,由于增加了分层模型的支持,所以D方法也可以实例化其他的模型,例如:

复制代码 代码如下:

// 实例化UserService类
$User = D('User','Service');
// 实例化UserLogic类
$User = D('User','Logic');

复制代码 代码如下:

D('User','Service');


会导入Lib/Service/UserService.class.,并实例化,等效于下面的代码:

复制代码 代码如下:

import('@.Service.UserService');
$User = new UserSerivce();


F方法

F方法其实是S方法的一个子集功能,仅用于简单数据缓存,并且只能支持文件形式,不支持缓存有效期,因为采用的是返回方式,所以其效率较S方法较高,因此我们也称之为快速缓存方法。

F方法的特点是:
简单数据缓存;
文件形式保存;
采用返回数据方式加载缓存;
支持子目录缓存以及自动创建;
支持删除缓存和批量删除;
写入和读取缓存

复制代码 代码如下:

F('data','test data');


默认的保存起始路径是DATA_PATH(该常量在默认配置位于RUNTIME_PATH.'Data/'下面),也就是说会生成文件名为DATA_PATH.'data.'的缓存文件。
注意:确保你的缓存标识的唯一,避免数据覆盖和冲突。
下次读取缓存数据的时候,使用:

复制代码 代码如下:

$Data = F('data');


我们可以采用子目录方式保存,例如:

复制代码 代码如下:

F('user/data',$data); // 缓存写入
F('user/data'); // 读取缓存


就会生成DATA_PATH.'user/data.' 缓存文件,如果user子目录不存在的话,则会自动创建,也可以支持多级子目录,例如:

复制代码 代码如下:

F('level1/level2/data',$data);


如果需要指定缓存的起始目录,可以用下面的方式:

复制代码 代码如下:

F('data',$data,TEMP_PATH);


获取的时候则需要使用:

复制代码 代码如下:

F('data','',TEMP_PATH);


删除缓存
删除缓存也很简单,使用:

复制代码 代码如下:

F('data',NULL);


第二个参数传入NULL,则表示删除标识为data的数据缓存。
支持批量删除功能,尤其是针对子目录缓存的情况,假设我们要删除user子目录下面的所有缓存数据,可以使用:

复制代码 代码如下:

F('user/*',NULL);


又或者使用过滤条件删除,例如:

复制代码 代码如下:

F('user/[^a]*',NULL);


G方法

Thinkphp长期以来需要通过debug_start、debug_end方法甚至Debug类才能完成的功能,3.1版本中被一个简单的G方法取代了,不可不谓是一次华丽升级。
G方法的作用包括标记位置和区间统计两个功能,下面来看下具体用法:
标记位置
G方法的第一个用法就是标记位置,例如:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/37d5b4399c0ba46605734ca310931d63.html