码迷,mamicode.com
首页 > Web开发 > 详细

改造 ThinkPHP,弃用 D() 等魔术函数

时间:2016-08-09 15:01:15      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

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() 等魔术函数

标签:

原文地址:http://www.cnblogs.com/52php/p/5752808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!