多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# ThinkPHP函数详解:D函数 [TOC] D函数用于实例化自定义模型类,是ThinkPHP框架对Model类实例化的一种封装,并实现了单例模式,支持跨模块调用,调用格式如下: >[success] **[资源://][模块/]模型** 方法的返回值是实例化的模型对象。 D函数可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化Model基类,同时对于已实例化过的模型,不会重复去实例化。 ## 实例化当前项目的某个自定义模型 ~~~ $User = D('User'); ~~~ 会导入当前模块下面的**APP_NAME/Model/UserModel.class.php**文件,然后实例化UserModel类,所以,实际上的代码可能和下面的等效: ~~~ import('@.Model.UserModel'); $User = new UserModel(); ~~~ 但是如果使用D方法的话,如果这个UserModel类不存在,则会自动调用 ~~~ new Model('User'); ~~~ 并且第二次调用的时候无需再次实例化,可以减少一定的对象实例化开销。 ## D方法可以支持跨模块实例化模型 ~~~ D('Admin/User'); ~~~ 实例化Admin模块的User模型,会导入Admin模块下面的**APP_PATH/Admin/Model/UserModel.class.php**文件,并进行实例化返回。 ## 实例化非模型命名空间下的数据逻辑层 ### 当前模块 ~~~ // 实例化UserService类 文件位于当前模块下的/Service/UserService.class.php $User = D('User','Service'); // 实例化UserLogic类 文件位于当前模块下的/Logic/UserLogic.class.php $User = D('User','Logic'); ~~~ 会导入当前模块下/Service/UserService.class.php,并实例化,等效于下面的代码: ~~~ import('@.Service.UserService'); $User = new UserSerivce(); ~~~ ### 跨模块实例化模型 ~~~ // 实例化UserService类 文件位于Admin/Service/UserService.class.php $User = D('Admin/User','Service'); // 实例化UserLogic类 文件位于当Admin/Logic/UserLogic.class.php $User = D('Admin/User','Logic'); ~~~