改造 ThinkPHP,弃用 D() 等魔术函数
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() 等魔术函数的更多相关文章
- ThinkPHP 模板substr的截取字符串函数
ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...
- PHP5中常用的魔术函数有哪些,举例说明各自的用法。
所谓魔术函数,是指不同时刻为了完成特定的功能,而自动调用的方法. __sleep 在serialize()序列化对象之前会调用这个函数__wakeup 在unserialize()解 ...
- php5魔术函数、魔术常量
魔术函数 1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct ...
- 序列化魔术函数__sleep()和反序列化魔术函数__wakeup()
1.string serialize ( mixed $value )— 产生一个可存储的值的表示 serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方. ...
- PHP 魔术变量和魔术函数详解
魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的 ...
- thinkPHP内置字符串截取msubstr函数用法详解
作者:陈达辉 字体:[增加 减小] 类型:转载 时间:2016-11-15 我要评论 这篇文章主要介绍了thinkPHP内置字符串截取函数用法,结合实例形式分析了thinkPHP内置的字符串截取函数功 ...
- PHP超级全局变量、魔术变量和魔术函数
PHP超级全局变量(9个) $GLOBALS 储存全局作用域中的变量 $_SERVER 获取服务器相关信息 $_REQUEST 获取POST和GET请求的参数 $_POST 获取表单的POST请求参数 ...
- php魔术变量和13个PHP魔术函数
PHP魔术变量确切地说是PHP魔术常量,不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了.比如说__LINE__放在不同的地方是显示不 ...
- PHP超级全局变量、魔术变量和魔术函数的区别和联系
PHP超级全局变量.魔术变量和魔术函数的区别和联系 一.总结 一句话总结:PHP超级全局变量主要用于web开发,魔术变量主要用于输出当前对象的信息,魔术函数则是对象的常用方法 相同点: 1.PHP超级 ...
随机推荐
- Sublime Text以及Package Control安装方法
官方下载:Sublime Text 中国论坛:Sublime 论坛 Sublime Text 是一个代码编辑器,具有漂亮的用户界面和强大的功能,并且它还是一个跨平台的编辑器,同时支持Windows.L ...
- 捉襟见肘之UITableViewCell重用引发的问题
我记录一下自己如何解决cell内容重叠的问题 首先,复习一下:http://blog.csdn.net/omegayy/article/details/7356823 UITableViewCell的 ...
- 捉襟见肘之 CoreImage初级自制相机图片效果
CoreImage.framework /* CoreImage - CoreImage.h Copyright (c) 2014 Apple, Inc. All rights reserved. * ...
- POJ3292 Semi-prime H-numbers
传送门: 刷<数论一本通>时看到的题,简单记录一下. 题目大意(照抄书上的):形如4n+1的数被称为H数,乘法在H数组成的集合内是封闭的.在这个集合中是能被1和本身整除的数叫H-素数,其余 ...
- MooseFs-分布式文件系统系列(三)之MFSclient端的使用
Web界面监控MFS状态 mfscgiserv 是用python写的一个web服务器,监听端口是9425,必须在master(管理服务器上)上启动 常用的参数如下: | 参数| 作用| |:--| : ...
- python学习笔记-(六)深copy&浅copy
在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象 ...
- 【经典】C++&RPG对战游戏
博文背景: 还记大二上学期的时候看的这个C++&RPG游戏(博主大一下学期自学的php,涵盖oop内容),一个外校的同学他们大一学的C++,大二初期C++实训要求做一个程序填空,就是这个 RP ...
- JS数组类型检测
在强类型语言,数组类型检测是非常容易的事情(typeof就可以解决),而在弱语言JS数据类型就很容易混淆了. JS中常见的数据类型有:number.string.boolean.undefined.f ...
- RHEL提示RHN没有注册问题的解决方法
1.系统RHEL5.5,初次使用yum时出现以下问题: [root@localhost real]# yum update Loaded plugins: rhnplugin, security Th ...
- coreos安装
cloud-config-bootstrap.sh #!/bin/bash cat > "cloud-config.yaml" <<EOF #cloud-conf ...