亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Loader.php-5

標簽:
PHP

/**

 * 实例化(分层)模型

 * @param string $name         Model名称

 * @param string $layer        业务层名称

 * @param bool   $appendSuffix 是否添加类名后缀

 * @param string $common       公共模块名

 * @return Object

 * @throws ClassNotFoundException

 */

public static function model($name = '', $layer = 'model', $appendSuffix = false, $common = 'common')

{// this is get model

    // 获取对应的信息

    if (isset(self::$instance[$name . $layer])) {

        return self::$instance[$name . $layer];

    }// 不同的 层 跟 不同的 名字 就可以确定 不同的 model

    // 对应到 不同的 key

    if (strpos($name, '/')) {// 如果你的名字不纯洁 那么就要处理你

        list($module, $name) = explode('/', $name, 2);//默认给到的 就是 list 方式

    } else {

        $module = Request::instance()->module();// 否则 应该会自动加载了,这个位置,不是初始化调用的地方

    }

    $class = self::parseClass($module, $layer, $name, $appendSuffix);// 获取到对应的 类 名 , this class name

    if (class_exists($class)) {// 找到的这个class变量,如果是个 class 的话,就使用他

        $model = new $class(); // 好用法

    } else {

        $class = str_replace('\\' . $module . '\\', '\\' . $common . '\\', $class);// 再次处理 这个 class

        if (class_exists($class)) {// 如果可以了

            $model = new $class();// 执行他

        } else {// 否则的话 抛出 类 异常

            // 这里可以补充一下, 其实应该是 model class not exists:

            throw new ClassNotFoundException('class not exists:' . $class, $class);

        }

    }

    self::$instance[$name . $layer] = $model;// 存入 key value 关键字

    return $model;// 返回 数据

}

 

/**

 * 实例化(分层)控制器 格式:[模块名/]控制器名

 * @param string $name         资源地址

 * @param string $layer        控制层名称

 * @param bool   $appendSuffix 是否添加类名后缀

 * @param string $empty        空控制器名称

 * @return Object|false

 * @throws ClassNotFoundException

 */

public static function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '')

{

    // 第一步: 获取对应的 model

        // 通过 不同的 方式 1

        // 方式2

    if (strpos($name, '/')) {

        list($module, $name) = explode('/', $name);

    } else {

        $module = Request::instance()->module();

    }

    // 第二步: 获取 class

    $class = self::parseClass($module, $layer, $name, $appendSuffix);

 

    // 第三步:对获取的class 进行 验证,存在,就

    if (class_exists($class)) {

        return new $class(Request::instance());// 返回

    } elseif ($empty && class_exists($emptyClass = self::parseClass($module, $layer, $empty, $appendSuffix))) {

        return new $emptyClass(Request::instance());// 返回空的

        // 看来进步了,没有报错,哈哈

    }

}

 

/**

 * 实例化验证类 格式:[模块名/]验证器名

 * @param string $name         资源地址

 * @param string $layer        验证层名称

 * @param bool   $appendSuffix 是否添加类名后缀

 * @param string $common       公共模块名

 * @return Object|false

 * @throws ClassNotFoundException

 */

public static function validate($name = '', $layer = 'validate', $appendSuffix = false, $common = 'common')

{// 进行验证,验证类型:

    // 名字 层名字 前缀

    $name = $name ?: Config::get('default_validate');// 获取验证规则 地址

    if (empty($name)) {// empty $name 如果文件为空,直接返回

        return new Validate;// 新的 验证类 Validate 新的验证类

    }

 

    if (isset(self::$instance[$name . $layer])) {// 存在就直接返回

        return self::$instance[$name . $layer];

    }// 如果已经 验证了

    if (strpos($name, '/')) {//

        list($module, $name) = explode('/', $name);

    } else {

        $module = Request::instance()->module();

    }

    // 获取类

    $class = self::parseClass($module, $layer, $name, $appendSuffix);

    if (class_exists($class)) {// 如果类存在

        $validate = new $class;// 生成 新类

    } else {

        $class = str_replace('\\' . $module . '\\', '\\' . $common . '\\', $class);// 如果 获取类

        if (class_exists($class)) {

            $validate = new $class;// 返回新 类

        } else {

            throw new ClassNotFoundException('class not exists:' . $class, $class);

        }

    }// 你懂的 类不存在了

    self::$instance[$name . $layer] = $validate;// 存档 备查询

    return $validate;

}

 

/**

 * 数据库初始化 并取得数据库类实例

 * @param mixed         $config 数据库配置

 * @param bool|string   $name 连接标识 true 强制重新连接

 * @return \think\db\Connection

 */

public static function db($config = [], $name = false)

{

    return Db::connect($config, $name);

}// 数据库 初始化 并取得 数据库 实例

 

/**

 * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作

 * @param string       $url          调用地址

 * @param string|array $vars         调用参数 支持字符串和数组

 * @param string       $layer        要调用的控制层名称

 * @param bool         $appendSuffix 是否添加类名后缀

 * @return mixed

 */

public static function action($url, $vars = [], $layer = 'controller', $appendSuffix = false)

{

    $info   = pathinfo($url);// 获取 url 地址信息

    $action = $info['basename'];// 获取 action 方式

    $module = '.' != $info['dirname'] ? $info['dirname'] : Request::instance()->controller();

    // 获取 中间值 module

    $class  = self::controller($module, $layer, $appendSuffix);// 获取 class 名称

    if ($class) {// 如果存在 class

        if (is_scalar($vars)) {// 如果是标准量

            if (strpos($vars, '=')) {// strpos

                parse_str($vars, $vars);// 解析字符串

            } else {

                $vars = [$vars];// 这个强转换 漂亮

            }

        }

        return App::invokeMethod([$class, $action . Config::get('action_suffix')], $vars);

    }//return App:: 验证文件是否存在

}

 

/**

 * 字符串命名风格转换

 * type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格

 * @param string  $name 字符串

 * @param integer $type 转换类型

 * @return string

 */

public static function parseName($name, $type = 0)

{// 转换字符串 风格的 一个小函数,如果1 就大写,否则就小写

    if ($type) {

        return ucfirst(preg_replace_callback('/_([a-zA-Z])/', function ($match) {

            return strtoupper($match[1]);

        }, $name));

    } else {

        return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));

    }

}

 

/**

 * 解析应用类的类名

 * @param string $module 模块名

 * @param string $layer  层名 controller model ...

 * @param string $name   类名

 * @param bool   $appendSuffix

 * @return string

 */

public static function parseClass($module, $layer, $name, $appendSuffix = false)

{// 解析 Class 类名

    $name  = str_replace(['/', '.'], '\\', $name);// 替换类名

    $array = explode('\\', $name);// 解析类资源

    $class = self::parseName(array_pop($array), 1) . (App::$suffix || $appendSuffix ? ucfirst($layer) : '');

    $path  = $array ? implode('\\', $array) . '\\' : '';

    return App::$namespace . '\\' . ($module ? $module . '\\' : '') . $layer . '\\' . $path . $class;

}// 解析 类名

 

/**

 * 初始化类的实例

 * @return void

 */

public static function clearInstance()

{

    self::$instance = [];

}// 初始化,就是 清空实例

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消