• 改造 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() 函数不受影响!

  • 相关阅读:
    微信小程序-----校园头条详细开发之注册登录
    微信小程序-----校园头条详细开发之首页
    day 99天
    day 98天
    day 97 VUE第一天
    day 96
    day 95天
    day 94 RestFramework序列化组件与视图view
    day 93 Restframwork
    day 92
  • 原文地址:https://www.cnblogs.com/52php/p/5752808.html
Copyright © 2020-2023  润新知