ThinkPHP 是国内比较优秀的 PHP 框架,但有些地方不是很好,比如那些 魔术函数 D(),用它返回的类实例,在各个IDE(如 PhpStorm)下根本识别不了,导致如下问题:

1、不支持 代码自动提示;

2、不支持 按住 Ctrl 键,点击 方法名,进入 方法的 定义处;

3、不支持 重构;

4、不支持 方法被使用/调用 统计;

等等问题;

总而言之,强大的IDE(PhpStorm)拿它一点办法都没有。

于是,越来越讨厌这样的 D()函数,,,改造一下它吧,操作过程如下:

1、新建 Base.class.php 类文件(文件路径为:ThinkPHP/Library/Think/Base.class.php),其内容如下:

<?php
namespace Think; /**
* 业务基类
*
* @package framework
* @author 52php.cnblogs.com
*/
class Base {
/**
* 类实例化
*/
public static function instance() {
static $_instance = array(); $classFullName = get_called_class();
if (!isset($_instance[$classFullName])) {
if (class_exists($classFullName)) {
$instance = $_instance[$classFullName] = new static();
return $instance;
} else {
throw new \Exception('"' . $classFullName . '" was not found !');
}
} return $_instance[$classFullName];
}
}

2、修改下 Model类(文件路径为:ThinkPHP/Library/Think/Model.class.php),让它继承上面的 Base类:

<?php
namespace Think; /**
* ThinkPHP Model模型类
* 实现了ORM和ActiveRecords模式
*/
class Model extends Base {
// 操作状态
const MODEL_INSERT = 1; // 插入模型数据
const MODEL_UPDATE = 2; // 更新模型数据
const MODEL_BOTH = 3; // 包含上面两种方式 // .... 后面的代码 被省略 }

3、改造后,效果如下:

//【现在的 写法】
$userList = UserMainModel::instance()->getByUserId('300061'); //【老的 写法】
$userList = D('UserMain')->getByUserId('300061');

注意:先前的 D() 函数不受影响!

改造 ThinkPHP,弃用 D() 等魔术函数的更多相关文章

  1. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

  2. PHP5中常用的魔术函数有哪些,举例说明各自的用法。

    所谓魔术函数,是指不同时刻为了完成特定的功能,而自动调用的方法. __sleep       在serialize()序列化对象之前会调用这个函数__wakeup    在unserialize()解 ...

  3. php5魔术函数、魔术常量

    魔术函数 1.__construct()  实例化对象时被调用,  当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct ...

  4. 序列化魔术函数__sleep()和反序列化魔术函数__wakeup()

    1.string serialize ( mixed $value )— 产生一个可存储的值的表示 serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方. ...

  5. PHP 魔术变量和魔术函数详解

    魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的 ...

  6. thinkPHP内置字符串截取msubstr函数用法详解

    作者:陈达辉 字体:[增加 减小] 类型:转载 时间:2016-11-15 我要评论 这篇文章主要介绍了thinkPHP内置字符串截取函数用法,结合实例形式分析了thinkPHP内置的字符串截取函数功 ...

  7. PHP超级全局变量、魔术变量和魔术函数

    PHP超级全局变量(9个) $GLOBALS 储存全局作用域中的变量 $_SERVER 获取服务器相关信息 $_REQUEST 获取POST和GET请求的参数 $_POST 获取表单的POST请求参数 ...

  8. php魔术变量和13个PHP魔术函数

    PHP魔术变量确切地说是PHP魔术常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了.比如说__LINE__放在不同的地方是显示不 ...

  9. PHP超级全局变量、魔术变量和魔术函数的区别和联系

    PHP超级全局变量.魔术变量和魔术函数的区别和联系 一.总结 一句话总结:PHP超级全局变量主要用于web开发,魔术变量主要用于输出当前对象的信息,魔术函数则是对象的常用方法 相同点: 1.PHP超级 ...

随机推荐

  1. 在Ubuntu上如何往fcitx里添加输入法

    Ubuntu 16.04引入了一个新的包管理工具apt, 用法与apt-get类似. 在终端用apt搜索fcitx支持的输入法 apt search fcitx All Fcitx related p ...

  2. Raspberry Pi 3 Basic Command and Information

    default username : pi default password : raspberry enter system setting interface : sudo raspi-confi ...

  3. redhat安装VMware tools的方法

    如果我们仔细看的话, 就会发现在VMware软件界面的左下角处显示着 "you don't have VMware Tools installed",即我们还没安装VMware T ...

  4. 使用ultraiso制作启动盘

    1.以管理员方式运行Ultralso 2.点击菜单栏里的“启动”菜单下的“写入硬盘映像”命令,打开“写入硬盘映像”对话框. “硬盘驱动器”里就是选择你要刻录的U盘,这里演示用的是一张数码相机的内存卡. ...

  5. MySQL缺失mysql_config文件

    打算爬虫,安装mysqldb 结果使用pip安装出错 在centos-6.4上pip install mysql-python,报错如下[sentry@kjtest111 mysql-python]$ ...

  6. JavaScript学习笔记——流程控制

    javascript流程控制流程:就是程序代码的执行顺序.流程控制:通过规定的语句让程序代码有条件的按照一定的方式执行. 一.顺序结构 按照书写顺序来执行,是程序中最基本的流程结构. 二.选择结构(分 ...

  7. HTTP2.0介绍

    HTTP2.0的所有通信都是在一个TCP连接上完成的. 1.信息传输术语 1.1 流 虚拟信道,可以承载双向消息,每个流都有一个唯一的整数标识符(1.2....N); 1.2 消息 逻辑上的HTTP消 ...

  8. ecshop商品-》购买记录

    注意事项:{insert name='bought_notes' id=$id}   有了产品ID一切都好说 html代码 <!-- #BeginLibraryItem "/libra ...

  9. Java Servlet系列之Servlet生命周期

    Servlet生命周期定义了一个Servlet如何被加载.初始化,以及它怎样接收请求.响应请求,提供服务.在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. init()方法 在Se ...

  10. Win8 删除桌面右键中的显卡选项

    打开注册表 regedit.exe HKEY_CLASSES_ROOT Directory Background shellex ContextMenuHandlers 按照上边的路径找过去.. 删除 ...