搜索
系统检测到您的用户名不符合规范:

单文件免继承实现通用Model,提高代码复用及维护性

浏览:1641 发布日期:2015年11月08日 分类:系统代码 关键字: Model 通用
编写Model功能的时候,通常方法就是在模块\Model目录建立对应的Model.class.php文件来实现Model功能。
如果有通用功能的话,可以在Common\Model建立对应的Model来通过继承实现通用Model。
这种方法文件结构清晰,但是每个对应的Model都需要建立文件来继承实现,M方法也更是力不从心。
本人则不喜欢这种结构,显然,通过修改核心加载代码就可以实现单文件通用型Model,不用建立那么多只有继承代码的Model文件。
首先声明,如果修改代码后造成异常或者引发其他问题,建议私信我解决,或者继续使用原版,继而造成的损失本人概不负责。

找到ThinkPHP\Common\functions.php的function D函数

找到if(empty($name)) return new Think\Model;修改为$parent = class_exists('\\Common\\Model') ? '\\Common\\Model' : '\\Think\\Model';
if(empty($name)) return new $parent;
找到$model = class_exists($class)? new $class($name) : new Think\Model($name);修改为$model = class_exists($class)? new $class($name) : new $parent($name);找到$model = new Think\Model(basename($name));修改为$model = new $parent(basename($name));还是这个PHP文件,找到function M函数

找到$class = 'Think\\Model';修改为$class = class_exists('Common\\Model') ? 'Common\\Model' : 'Think\\Model';实现原理则是通过继承Common\Model来实现单文件通用型Model。
当然无论是D还是M方法,通过上述修改后都可实现从Common\Model继承。

建立Application\Common\Model.php文件,
文件模板,记住编码格式UTF8无签名。<?php
namespace Common;
class Model extends \Think\Model{
public function test(){//测试方法
echo('Common\Model test');
}
}
上面不使用use Think\Model的原因是避免当前Common\Model类声明重复的冲突,也为了让继承类更好的书写几乎和原生无异的Model。优点可以看下面代码。

如果需要在当前模块的Model使用Common\Model
则文件模板为<?php
namespace Home\Model;
use Common\Model;
class XxxModel extends Model{
public function test(){//测试方法
parent::test();//调用Common\Model::test()方法
echo('Home\Model test');
}
}
对于单文件通用Controller的实现,由于相对较复杂,稳定性本人也在测试中。
用于实现登录,改密,等常规通用型操作也是相当的方便。

吐槽一下官方的发布代码功能,点了一下预览,手残给关闭了,发现预览竟然不是_blank,结果撤销在返回什么都没了,导致重新写了一遍。
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
路过已错过
积分:313 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /