91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkPHP源碼閱讀3------行為擴展

發布時間:2020-07-16 10:13:28 來源:網絡 閱讀:1947 作者:AndyMac 欄目:web開發

  ThinkPHP的核心采用的框架模式是CBD,也就是核心Core+行為Behavior+驅動Driver,核心也就是整個框架模式的核心,大部分都是一些基類,去規定規則,Behavior是行為,就是在指定的地方調用來完成一些特定的行為功能,而Driver驅動就類似cache緩存驅動,mysqldb 數據庫驅動等,完成功能

  行為在手冊的13.1中說的很詳細.我只去寫一些實例.調用行為的方法.

  調用方法是tags()


/**
 * 處理標簽擴展
 * @param string $tag
 *          標簽名稱
 * @param mixed $params
 *          傳入參數
 * @return mixed
 */
function tag($tag, &$params = NULL) {
    // 系統標簽擴展
    $extends = C ( 'extends.' . $tag );
    // 應用標簽擴展
    $tags = C ( 'tags.' . $tag );
    if (! empty ( $tags )) {
        if (empty ( $tags ['_overlay'] ) && ! empty ( $extends )) { // 合并擴展
            //array_unique   移除數組中重復的值
            $tags = array_unique ( array_merge ( $extends, $tags ) );
        } elseif (isset ( $tags ['_overlay'] )) { // 通過設置 '_overlay'=>1 覆蓋系統標簽
            unset ( $tags ['_overlay'] );
        }
    } elseif (! empty ( $extends )) {
        $tags = $extends;
    }
    if ($tags) {
        if (APP_DEBUG) {
            G ( $tag . 'Start' );
            trace ( '[ ' . $tag . ' ] --START--', '', 'INFO' );
        }
        // 執行擴展
        foreach ( $tags as $key => $name ) {
            if (! is_int ( $key )) { // 指定行為類的完整路徑 用于模式擴展
                $name = $key;
            }
            B ( $name, $params );
        }
        if (APP_DEBUG) { // 記錄行為的執行日志
            trace ( '[ ' . $tag . ' ] --END-- [ RunTime:' . G ( $tag . 'Start', $tag . 'End', 6 ) . 's ]', '', 'INFO' );
        }
    } else { // 未執行任何行為 返回false
        return false;
    }
}


tag調用的時候,可以指定覆蓋系統行為.之后會調用B函數去實例化行為對象.

/**
 * 執行某個行為
 *
 * @param string $name
 *          行為名稱
 * @param Mixed $params
 *          傳入的參數
 * @return void
 */
function B($name, &$params = NULL) {
    if (strpos ( $name, '/' )) {
        list ( $name, $method ) = explode ( '/', $name );
    } else {
        $method = 'run';
    }
    $class = $name . 'Behavior';
    if (APP_DEBUG) {
        G ( 'behaviorStart' );
    }
    $behavior = new $class ();
    $behavior->$method ( $params );
    if (APP_DEBUG) { // 記錄行為的執行日志
        G ( 'behaviorEnd' );
        trace ( $name . ' Behavior ::' . $method . ' [ RunTime:' . G ( 'behaviorStart', 'behaviorEnd', 6 ) . 's ]', '', 'INFO' );
    }
}


B函數可以實例化行為對象,并且傳入行為需要的參數.行為需要的參數可以在配置文件config.php中更改.并且會覆蓋行為中的默認參數.

行為的基類在Lib/Conf/Behavior.class.php中

protected $options =  array(); 保存行為的參數

__construct    初始化類,參數賦值.   主要就是賦值,如果在config.php中存在的話,就用config.php中得覆蓋.

__get          獲取參數     獲取行為參數

run             行為唯一執行入口

在B函數中,也可以手動指定參數執行入口,方法是B('類名/方法名')的方式

默認的行為有:

CheckRoute檢測路由,路由匹配
ContentReplace模板內容輸出替換
ParseTemplate模板解析
ReadHtmlCache靜態緩存讀取
ShowPageTrace頁面Trace顯示
ShowRuntime運行時間顯示
TokenBuild表單令牌生成
WriteHtml靜態緩存寫入

擴展行為有

AgentCheck代理檢測
BrowserCheck瀏覽器檢測,防刷新
CheckActionRoute操作路由檢測
CheckLang語言檢測,并且自動加載語言包
CronRun自動任務
FireShowPageTrace將Trace輸出到firefox的firebug
RobotCheck機器人檢測(就是檢測百度蜘蛛等)
Upgrade自動升級提示行為


現在寫一個例子,大家就可以理解了.

在App.class.php中,App::run的方法里,有一個調用應用初始化標簽的地方.

/**
     * 運行應用實例 入口文件使用的快捷方法
     * @access public
     * @return void
     */
    static public function run() {
        // 項目初始化標簽
        tag('app_init');
        App::init();
        // 項目開始標簽
        tag('app_begin');
        // Session初始化
        session(C('SESSION_OPTIONS'));
        // 記錄應用初始化時間
        G('initTime');
        App::exec();
        // 項目結束標簽
        tag('app_end');
        return ;
    }

現在在項目/Lib/Behavior里新建一個AppinitBehavior.class.php

<?php
class AppinitBehavior extends Behavior{
    function run(&$param){
        echo '應用開始了';
    }
}


然后在項目/Conf/tags.php里

<?php
return array(
    'app_init'=>array(
        'Appinit'
    )
);


       這樣,在運行項目的時候,則會都輸出應用開始了.非常方便.如果要修改,擴展,都直接修改類或者擴展類即可,不需要修改源代碼,擴展性非常好.


ThinkPHP源碼閱讀3------行為擴展  

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

唐河县| 和平县| 宜丰县| 绥阳县| 文安县| 邢台县| 洛南县| 汉寿县| 上蔡县| 化德县| 临洮县| 桃江县| 石景山区| 舟曲县| 葫芦岛市| 海晏县| 天镇县| 新野县| 西林县| 搜索| 盘山县| 普兰店市| 谷城县| 平武县| 岳阳市| 株洲市| 山东省| 舞钢市| 丽水市| 绥芬河市| 上虞市| 隆尧县| 涿鹿县| 庆城县| 蓬溪县| 哈尔滨市| 顺平县| 宾阳县| 凌源市| 宁河县| 启东市|