Home  >  Article  >  php教程  >  单文件免继承实现通用Model,提高代码复用及维护性

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

WBOY
WBOYOriginal
2016-06-07 11:36:351291browse

编写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';<br> 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 <br /> namespace Common;<br> class Model extends \Think\Model{<br>     public function test(){//测试方法<br>         echo('Common\Model test');<br>     }<br> }上面不使用use Think\Model的原因是避免当前Common\Model类声明重复的冲突,也为了让继承类更好的书写几乎和原生无异的Model。优点可以看下面代码。

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

吐槽一下官方的发布代码功能,点了一下预览,手残给关闭了,发现预览竟然不是_blank,结果撤销在返回什么都没了,导致重新写了一遍。

AD:真正免费,域名+虚机+企业邮箱=0元

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn