// 实例化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方法的第一个用法就是标记位置,例如:
复制代码 代码如下: