程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Onthink學習隨筆,onthink隨筆

Onthink學習隨筆,onthink隨筆

編輯:關於PHP編程

Onthink學習隨筆,onthink隨筆


-------------------------------------(寫代碼不孤獨_小小代)

用Onthink寫了一個網站暫時還沒上線功能略顯不全沒,完全沒有發揮出應有的強大拓展之處,各種地方略顯蹩腳。

但是其強大的數據表控制還是顯漏一角,鑒於此進軍基於開發的thinphp3.2.2世界。。。

第一天 完成手冊序言,基礎,配置,架構,路由閱讀。

第二天 完成控制器模型閱讀   關於 附錄閱讀

下面是閱讀隨錄

*************************************************

use 表示引入什麼 命名空間便於直接引用
函數的命名方法使用小寫字母和下劃線的方式
方法的命名 使用的小寫字母和下劃線  下劃線的代表的是(一般私有方法 )
雙下劃線 打頭的函數或方法作為魔法方法 __call
    養成使用I函數獲取輸入變量的好習慣;
    更新或者環境改變後遇到問題首要問題是清空Runtime目錄;
慣例配置 應用配置 模式配置 調試配置 狀態配置 模塊配置
    慣例配置ThinkPHP/Conf/convention.php 應用配置是基於慣例配置的拓展    

Application/Common/Conf/config.php調用所有模塊之前都會先加載的公共配置文件
 可選擇的模式配置就是在應用配置文件夾新增 運行該模式才運行的文件config_應用名稱.php
調試模式 開啟就會加載ThinkPHP/Conf/debug.php和應用調試配置文件Application下的
狀態配置就是手工分離
模塊配置 Application/當前模塊名/Conf/config.php
 讀取配置文件
    定義了配置文件後,都統一使用系統提供C方法(可以借助Config)來讀取或者設置
    配置參數名稱不能含有'.'和特殊字符,允許的字母,數字和下劃線 C方法可以讀取二維
配置 配置參數是全局有效的     通過c配置的參數值是當前有效地不會寫入數據庫

URL詳情 pathinfo模式說明
serverName/index.php(或者其他應用入口文件)/模塊/控制器/操作/[參數名/參數值...]
    公共的配置文件config.php 公共函數文件function.php可以把路徑加載到common_path中
在入口文件當中配置,如果定義過後Application下面就不需要在加載Application
    3.2.2寫在入口文件可以默認自動生成的模塊,控制器。define('BIND_MODULE','xx')如

果想生成更多的控制器BUILD_CONTROLLER_LIST常量
    // 綁定Admin模塊到當前入口文件
    define('BIND_MODULE','Admin');
    define('BUILD_CONTROLLER_LIST','Index,User,Menu');
    手動調用Think\Bulid類的方法來生成模型類\Think\Build::buildModel            

            ('Admin','Role');
//禁止訪問模塊 配置禁止訪問的模塊列表(用於被其他模塊調用或者不開放訪問),默認配置中

是禁止訪問Common模塊和Runtime模塊(Runtime目錄是默認的運行時目錄),我們可以增加其他的

禁止訪問模塊列表:
    'MODULE_DENY_LIST'      =>  array('Common','Runtime','Api'),
設置訪問列表
    允許訪問列表和默認模塊
    'MODULE_ALLOW_LIST'    =>    array('Home','Admin','User'),'DEFAULT_MODULE'     

      =>    'Home',
單模塊設計 就是關閉多模塊訪問 MULTI_MODOULE=>false

多入口設計
    接受參數綁定模塊
    // 綁定Home模塊到當前入口文件$_GET['m'] = 'Home';
    define('APP_PATH','./Application/');require './ThinkPHP/ThinkPHP.php';
    綁定後http://serverName/index.php/Home/Index/index變成                

        http://serverName/home.php/Index/index(綁定後url不顯示home)
URL區分大小寫    URL_CASE_INSENSITIVE=>true
模型層    數據層,邏輯層,服務層,等不同的模型層  創建Model,Logic,sercive
調用的時候 用D方法很方便的調用 D('User','Logic');//實例化UserLogic D('User')則是實例化

UserModel .
更改系統默認的view層 DEFAULT_V_LAYER=>'Mobile';對於非默認視圖層目錄的模板獲取使用T函

數獲取。
控制器(Controller)層 核心控制器在系統內部的App類完成
    Event/UserEvent//用於用戶的事件響應操作Controller負責的事外部的響應Event負責內

部的事件響應,並且只能在內部調用A('User','Event');

CBD模型
    Core(核心)+Behavior(行為)+Driver(驅動)

Driver(驅動)
  3.2在架構設計上更加強化了驅動的設計,替代了之前的引擎和模式擴展,並且改進了行為的設

計,使得框架整體更加靈活,並且由於在需要寫入數據的功能類庫中都采用了驅動化的設計思想,

所以使得新的框架能夠輕松滿足分布式部署的需求,對雲平台的支持可以更簡單的實現了。    
Behavior(行為)
  行為是一個比較抽象的概念,各個位置都會有行為的產生。
    有些行為是在應用執行之前,有些是在模板輸出以後,我們把這些行為作為的位置成為標

簽(位),也可以成為鉤子, 當應用程序運行到這個標簽的時候,就會被攔截下來,統一執行相關的

行為,類似於AOP編程中的“切面”的概念,給某一個標簽綁定相關行為就成了一種類AOP編程的思

想。
    標簽位
    tag函數用於設置某個標簽位,可以傳入並且只接受一個參數,如果需要傳入多個參數,

請使用數組,    \Think\Hook::listen('my_tag');
    行為定義 必須定義執行入口方法run,由於行為的調用機制影響,在那調用在哪返回。
    行為綁定 行為定義後需要定義到某個標簽位才能生效,否則是不會執行的。 需要在應用

的行為定義文件tags.php文件中進行行為和標簽的位置定義。
    return array(     '標簽名稱1'=>array('行為名1','行為名2',...),      '標簽名稱    

    2'=>array('行為名1','行為名2',...),  );

3.2.1版本以上的,允許設置對應類庫不使用命名空間。
        配置文件'APP_USE_NAMESPACE'    => false(繼承調用系統類的時候,仍需要)
    3.2版本中實例化php內置的類庫或者第三方的沒有使用命名空間定義的類。
    $class =    new \stdClass();    $sxml  =    new \SimpleXmlElement($xmlstr);
自動加載 (命名空間自動加載)Library目錄下面的命名空間都可以自動識別和定位。
    除了library目錄下的命名空間以外,我們還可以定義其他的命名空間    

autoload_namespace
    提高效率 類庫映射多個根命名空間Think\Think::addMap($map); $map=array();
    手動第三方類庫導入import方法導入任何類庫。
內置的緩存機制 和運行lite文件 新版本的特征 運行時生成靜態的入口文件。

應用模式 應用模式就是增加自動識別區域

項目編譯 應用編譯緩存(首次運行的緩存)——運行Lite文件(入口靜態)
-------------===========
路由定義
    url不為普通模式,開啟路由可以在應用(或者模塊)配置文件中開啟路由
// 開啟路由 'URL_ROUTER_ON'=〉true, 3.2路由是針對模塊 所以模塊名不能被路由,路由的定義

通常也是在模塊配置文件中。
    路由表達式=〉路由地址和傳入參數        array('路由表達式','路由地址','傳入參    

數')
路由表達式
    正則表達式 /^blog\/(\d+)$/
    規則表達式 blog/:id
    
    完全匹配  $
    公共方法
-------
控制器
    如果要操作的方法是一個控制器的方法是與系統的關鍵字沖突,我們可以設置後綴的方法

解決 'ACTION_SUFFIX'=>  'Action', // 操作方法後綴
多級控制器 就是把控制器分組
實例化控制器 如果是內部的則在用url地址解析的時候就自動實例化了並且調用如果是跨控制器調

用的話則 實例化 然後使用快捷方法A調用(如果是多層次的話就使用A的第二個參數) 可以在實例

化的時候那方法實例化.

前置和後置操作 (僅對控制器有用)

常見的是_before_index前置方法 _after_index後置方法  如果沒有定義前置後置方法,真正有模

板輸出的可能僅僅是當前的操作,前置和後置操作一般情況下是沒有任何輸出的。調用錯誤成功操

作的話是沒有後置操作的。
    控制器也可以綁定參數規則 action參數綁定    (按變量名能綁定 實現路由功能)
偽靜態
    URL_HTML_SUFFIX=〉''   靜態後綴記錄到常量__EXT__(可以獲取當前的後綴)
    URL_DENY_SUFFIX=〉不允許訪問的後綴 多個用|隔開
    下面的優先級高於上面的
URL大小寫 'URL_CASE_INSENSITIVE' =>true  不區分大小寫的時候訪問控制器大寫要前加_
    系統提供U方法可以為你自動生成相關的URL地址

U    類似的(redirect)    (URL生成)
為了配合所使用的URL模式,我們需要能夠動態的根據當前的URL設置生成對應的URL地址,為此,

ThinkPHP內置提供了U方法,用於URL的動態生成,可以確保項目在移植過程中不受環境的影響。    
    U('地址表達式',['參數'],['偽靜態後綴'],['顯示域名'])
    [模塊/控制器/操作#錨點@域名]?參數1=值1&參數2=值2...
ajax返回 ajaxReturn
    可以接受 變量 數組 返回的數據可以治 JSON、JSONP、XML和EVAL 可以配置采用什麼方    

式返回DEFAULT_AJAX_RETURN 進行返回  eval可以輸出$data數據
      JSON和JSONP雖然只有一個字母的差別,但其實他們根本不是一回事兒:JSON是一種數    

    據交換格式,而JSONP是一種非官方跨域數據交互協議。一個是描述信息的格式,一個    

    是信息傳遞的

    
約定方法。

跳轉和重定向
    $this->success(提示信息,地址,秒數)

----==--=-=
輸入變量
    可以通過 I 函數進行變量獲取和過濾
    I('變量類型.變量名',['默認值'],['過濾方法'],['額外數據源'])
    I函數自帶就有DEFAULT_FILTER默認的是htmlspecialchars    (變量的過濾)

判斷請求類型    (請求類型)
    is_XXX    如果是自定義的AJAX則需要添加隱藏域告訴後台是ajax提交的 如果是jquery的    

    話則不需要。  可以通過VAR_AJAX_SUBMI配置
空操作
     自動調用_empty(實現錯誤頁面和一些url優化)
     空控制器系統嘗試定到EmptyController
操作綁定到類      ACTION_BIND_CLASS=〉‘true’分的更加細致不能省略
        前置後置操作需要提前定義
-=-=-=-=-=-=-=-=-=-=-=-
    模型   大小寫和_轉換
        模型類直接實例化一般都繼承model類 model一般有3個值 模型名數據表前綴數    

據庫連接信息
        如果要寫原生的sql代碼 則只需要實例化空就好M();
    D (數據模型的實例化操作)
    方法的參數就是模型的名稱,並且和模型類的大小寫定義是一致的.
    類不存在的時候,D函數會嘗試實例化公共模塊下面的,還可以跨模塊使用
    M(僅僅是對數據表進行基本的CURD操作)不需要加載具體的模型類,所以性能更高.
     不支持自己的業務邏輯
    我們在實例化的過程中,經常使用D方法和M方法,這兩個方法的區別在於M方法實例化模    

    型無需用戶為每個數據表定義模型類,如果D方法沒有找到定義的模型類,則會自動用M    

    方法。
字段緩存包括字段裡面的字段信息 可以通過設置DB_FIELDS_CACHE來關閉字段自動緩存在項目配置

文件中增加該字段
    獲取數據表的所有字段信息 getDbFields(); field(''/*);獲取要調用所有字段field    

    (true).
    切換數據表用table(); 連接數據庫的時候可以為連接加上標識
    系統默認規則,必須用模型execute 寫操作  query 讀操作
連貫操作 (鏈式操作)
    where可以和where連用
    data方法 是針對數據庫寫入的也可以用於更新(save)可以判斷是否有主鍵 對象可以是數    

組,對象和字符串。可以進行讀操作.
    field 獲取字段,字段的排除filed(array('user_id','content'),true);就是user_id和

content之外的字段。 用於寫入 (安全性的控制)不允許其他的寫入  $model->field('name')-

>create();即表示表單中的合法字段只有name字段,無論用戶通過什麼手段更改或者添加了浏覽器

的提交字段,都會直接屏蔽。因為,其他是所有字段我們都不希望由用戶提交來決定,你可以通過

自動完成功能定義額外的字段寫入。
    filert(字段內容的過濾)有點類似I的判斷 $User->data($data)->filter        

    ('strip_tags')->add();過濾掉HTML標簽  (支持回調類型的函數 可以是函數或者是閉包    

    定義)
    having方法是為了配合group方法從分組的結果中再次查詢。
    cache  s
    comment    注釋
    Create方法創建的數據對象是保存在內存中,並沒有實際寫入到數據庫中,直到使用add

或者save方法才會真正寫入數據庫。add或者save之後才被寫入數據庫,因此在沒有改變之前都可

以改變create對象.
    
----
find(讀取一條字段)   select(讀取字段集)  getField(讀取字段值)[數字的更新setInc setDec]
delete()    [在沒有任何的條件傳入的時候是不會進行刪除的類似於seve]

表單映射 數據獲取的時候自動處理設置開啟 'READ_DATA_MAP'=>true  
     也可以使用parseFieldsMap進行格式上的轉換
查詢方式
    數組 '_logic'='OR'    使用對象方式查詢 stdClass  
    $map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND');
    exp 表達式查詢(exp查詢的條件不會被當成字符串) 所有後面的查詢條件可以使用任何的

sql支持的語法,包括使用函數和字段名稱。查詢表達式不僅可以用於查詢條件,也可以用於數。

據更新。
$data['score'] = array('exp','score+1');// 用戶的積分加1
$User->where('id=5')->save($data); // 根據條件保存修改的數據

多語言包的支持       L

*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1
????????????????????????????????????????
多級控制器
實例化控制器
distinct  
(令牌驗證)token
ORM   表映射到類 記錄映射到對象
AR模式 ActiveRecord     一種簡單的命令
怎麼帶有prefix就可以啟用本地session管理的支持

*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_12_1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved