日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

ThinkPHP入门

發布時間:2024/7/23 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ThinkPHP入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ThinkPHP項目的創建

<?php include "../../ThinkPHP/ThinkPHP.php";

在index.php中導入ThinkPHP.php即可,會自動創建目錄。

tp創建流程分析

1. 入口文件index.php2. ThinkPHP/ThinkPHP.phprequire THINK_PATH.'Common/runtime.php';3. ThinkPHP/Common/runtime.php聲明許多常量信息加載系統核心類文件if(is_file($file)) require_cache($file);自動創建應用目錄build_app_dir();Think::Start(); 4. ThinkPHP/lib/Core/Think.class.phpstatic function start(){}Think::buildApp(); // 預編譯項目引入相關配置文件App::run(); 5. ThinkPHP/lib/Core/App.class.phpstatic public function run(){}App::init();Dispatch分析路由分析路由(控制器MODULE_NAME 方法ACTION_NAME) index.php?c=控制器&a=方法App::exec();通過反射ReflectionMethod使得控制器對象調用對應的方法

PHP中的反射

<?phpclass Person{public $name = "xiaoming";function say(){echo "I am ".$this->name;}function run($addr,$age){echo "I am ".$this->name;echo ",I at ".$addr;echo ", my age is ".$age;echo ",running";} } $per = new Person; //$per -> say();//利用反射實現對象調用方法 //$md = new ReflectionMethod(類名,方法名); //反射方法對象 //反射好處:可以獲得 方法的屬性(是否公開的、私有的、受保護的等等) //$md = new ReflectionMethod("Person","say"); //讓指定的對象調用這個方法 //$md -> invoke($per);//通過反射執行帶參數的方法 $mda = new ReflectionMethod("Person","run"); $mda -> invokeArgs($per,array('beijing',23));

空操作和空模塊

tp框架把MVC中的控制器稱作是模塊(module) index.php?m=控制器&a=操作
http://網址/index.php/User/login 正常請求
http://網址/index.php/User/beijing “空操作”請求
http://網址/index.php/American/login “空模塊”

  • 什么是空操作:
    用戶訪問一個控制器中不存在的方法,就是空操作。
    實例化對象,這個對象去調用類里邊不存在的方法
    在OOP中有魔術方法,__call(),自動調用方法,
    對象調用類中不存在方法要統一走這個方法
  • 2.空操作處理:
    a)在對應的控制器里邊定義方法_empty()
    b)給應用添加一個函數名字是:__hack_action() 推薦使用
    應用函數庫文件:shop/Common/common.php

    3.空模塊(空控制器)
    tom=newAmerican();tom是不存在的對象

    處理方式:
    ①定義函數__hack_module() 推薦使用
    ②給系統定義空模塊:EmptyAction.class.php

    跨模塊調用

    一個控制器可以實例化另一個控制器,并調用其相關方法

    /系統有自動加載機制,會完成控制器類的引入// ThinkPHP/Lib/Core/Think.class.php//$user = new UserAction();//echo $user -> number();//系統給我們提供快捷函數,實現控制器的實例化//A('控制器標志')//A('[項目://][分組/]控制器');//A() ThinkPHP/Common/common.php$user = A('home/User');echo $user -> number();$indx = A("book://Index");echo $indx -> apple();//R("[項目://][分組/]模塊/操作方法") 跨模塊調用函數//實例化控制器并直接調用相關方法//R()方法有封裝A()方法,之后利用對象調用相關操作echo R("home/User/number");echo R("book://Index/apple",array('hello','world'));

    ThinkPHP數據庫操作

    在config.php中配置

    //數據庫配置'DB_TYPE' => 'mysql', // 數據庫類型'DB_HOST' => 'localhost', // 服務器地址'DB_NAME' => 'shop', // 數據庫名'DB_USER' => 'root', // 用戶名'DB_PWD' => '111111', // 密碼'DB_PORT' => '', // 端口'DB_PREFIX' => 'sw_', // 數據庫表前綴'DB_FIELDTYPE_CHECK' => false, // 是否進行字段類型檢查////處于性能考慮,把數據表字段放入緩存里邊,//這樣下次訪問就避免執行sql語句重復執行重新獲取//開發調試模式APP_DEBUG=true,下邊緩存無效//生產模式APP_DEBUG=false,緩存有效'DB_FIELDS_CACHE' => true, // 啟用字段緩存//修改模板引擎為smarty'TMPL_ENGINE_TYPE' => 'Smarty', // 默認模板引擎 //在頁面底部顯示日志信息'SHOW_PAGE_TRACE' => true, // 顯示頁面Trace信息

    實例化數據模型model的三種方法
    1.goodsmodel=newGoodsModel();2.goods_model = D(“Goods”); 快捷函數
    a)obj=D();//modelb)obj就可以執行原生的sql語句
    3.model=M();modela)model = M(‘User’); 創建基類model對象,但是操作的數據表sw_user

    查詢數據信息

    ① Model.class.php類本身就存在該方法,例如(where() field() limit() select())
    ② __call()自動調用方法集成了一些方法,例如(table() order() group())
    這些方法可以進行連貫操作info=obj -> where()->order()->limit()->select()

    $goods_model = D('Goods'); $info=$goods_model->select();//通過select()方法查詢數據 //返回二維數組 //select(記錄主鍵值) //select("13,26,33"); $info = $goods_model -> select(); 全部記錄信息 $info = $goods_model -> select(19); //根據主鍵值查詢指定記錄 $info = $goods_model -> select("13,26,33"); //根據主鍵值查詢若干條記錄//find()方法返回一個一維數組數據 //每次只返回一條記錄信息 $info = $goods_model -> find(19); $info = $goods_model -> find("29,32,45,19"); show_bug($info);//限制字段查詢field("字段,字段..."); $info = $goods_model -> select(); //全部字段、全部記錄信息 $info = $goods_model->field("goods_name,goods_number,goods_create_time")->select();//顯示查詢條數limit([偏移量,]長度) $info = $goods_model -> limit(5)->select(); $info = $goods_model -> limit(5,5)->select();//排序查詢order("price asc/desc") $info = $goods_model -> order('goods_price desc')->select(); $info = $goods_model -> order('goods_price desc')->limit(5)->select(); //model對象調用本身不存在的方法order() //實際會執行魔術方法__call()自動調用//下邊的連貫操作,多個條件彼此沒有順序要求,最后都被傳遞給options屬性 //options屬性最后會把sql語句根據條件給拼裝好 $info = $goods_model ->limit(5)->field('goods_name,goods_price')-> order('goods_price desc')->select();//設置where條件 where() $info = $goods_model->where('goods_price > 5000')->select(); $info = $goods_model ->table('sw_goods')->select(); $info = $goods_model -> group("goods_category_id")->select();

    1.select() 返回二維數組
    2.find() 返回一維數組
    3.getByXXX(); 根據指定字段進行數據查詢
    返回一維數組
    getByGoods_price(12000);
    getByGoods_name(); 魔術__call();
    4.having() 設置查詢條件
    與where比較類似
    select * from sw_goods where goods_price>100;
    select * from sw_goods having goods_price >100;

    function showlist(){$goods_model = D("Goods");//查詢名字為"三星BC01"商品信息//$info = $goods_model -> getByGoods_name('三星BC01');//$info = $goods_model -> getByGoods_price('5999');//show_bug($info);//$info = $goods_model -> having("goods_name like '諾%'")->select();//執行原生sql語句$sql = "select * from sw_goods a join sw_category b on a.goods_category_id=b.cat_id";$info = $goods_model->query($sql);$this -> assign('info', $info);$this -> display();}

    model聚合函數使用
    count() sum() max() avg() min()

    執行原生sql語句
    model?>query()model -> execute() 增加、修改、刪除
    insert update delete
    成功執行返回受影響的記錄數目

    添加數據add

    兩種方式實現數據添加:數組方式、AR方式
    AR規則:
    1.數據庫中的每個數據表都對應一個類,model
    2.數據表中的每條記錄都是類的一個對象
    3.記錄信息的每個字段都是對象的屬性
    在tp框架中AR模型是假的

    數據查詢有options屬性匯集各種連貫查詢條件
    數據添加有data屬性實現各種信息的收集

    //添加商品function add1(){$goods_model = D("Goods");//實現數據添加//數組下標 與 數據庫表 字段 一致/*$d = array('goods_name'=>'htc230','goods_price'=>'3999','goods_number'=>45,'goods_weight'=>103);$rst = $goods_model -> add($d);*///AR方式實現數據添加//對象調用不存在的屬性需要調用魔術方法__set();/*$goods_model -> goods_name = "iphone6";$goods_model -> goods_price = "5700";$goods_model -> goods_number = 31;$goods_model -> goods_weight = 110;* *///以上4個信息最后被$this->data收集$rst = $goods_model -> add();show_bug($rst); //被添加記錄本身的id值$this -> display();}

    通過表單form實現數據添加

    function add(){$goods_model = D("Goods");//判斷是否提交表單if(!empty($_POST)){//數據添加//foreach($_POST as $k => $v){// $goods_model -> $k = $v;//}$goods_model -> create(); //tp框架本身收集表單數據方法$rst = $goods_model -> add();if($rst){$this -> success('添加成功',__URL__."/showlist");}} else {$this -> display();}}

    修改數據

    查詢:select() 添加:add()
    修改關鍵字:save() 返回受影響的記錄數目

    添加數據:數組 和 AR
    修改數據:數組 和 AR
    注意:實現數據修改必須符合兩個條件(主鍵id 或 where條件)

    //修改商品function upd1(){$goods_model = D("Goods");//修改數據$d = array('goods_name'=>'小米手機','goods_price'=>3200);$rst = $goods_model->where('goods_id>50') -> save($d);//在實際生產中,是不允許一次性修改全部記錄信息show_bug($rst);// $goods_model -> goods_name = "xxx"; // $goods_model -> goods_price = "xxx"; // $goods_model -> save();$this -> display();}

    具體案例實現update
    以前:http://網址/index.php?m=控制器&a=操作&goods_id=100&goods_price=2300
    現在:http://網址/index.php/控制器/操作/參數1/值/參數2/值/參數3/值。。。。。。

    function upd(參數1,參數2,參數3){//$_GET[‘參數1’];//$_GET[‘參數2’];參數1,參數2,參數3具體使用 } //以下方法被訪問必須傳遞參數//http://網址/index.php/控制器/方法/goods_id/102/goods_price/305//url地址參數名字要求與方法參數一致function upd($goods_id,$goods_price=506){//把被修改的商品信息查詢出來,傳遞給模板顯示$goods_model = D("Goods");if(!empty($_POST)){//接收修改的表單數據$goods_model -> create(); //收集表單信息$rst = $goods_model -> save();if($rst){//$this -> success(提示信息,跳轉地址);$this -> success('修改成功',__URL__."/showlist");}} else {$info = $goods_model -> getByGoods_id($goods_id);$this -> assign('info',$info);$this -> display();}}

    tp框架中表單域驗證

    表單驗證:
    通過tp框架進行表單驗證
    先決條件:收集表單數據必須通過create()收集
    create()方法內部有集成表單驗證規則

    具體使用

    //注冊操作function register(){$user_model = D("User");if(!empty($_POST)){show_bug($_POST);$z = $user_model -> create(); //收集數據if($z){//把愛好的數組變為字符串$user_model -> user_hobby = implode(',',$_POST['user_hobby']);$rst = $user_model -> add();if($rst){echo "ok";} else {echo "failure";}} else {//表單域驗證有錯誤show_bug($user_model -> getError());}}else {}$this -> display();}

    在create()時會發生驗證,驗證的代碼寫在model中

    <?phpclass UserModel extends Model{//批量錯誤信息顯示// 是否批處理驗證protected $patchValidate = true;//進行表單域驗證//protected $_validate = array(); // 自動驗證定義protected $_validate = array(//array(驗證字段,驗證規則,錯誤提示,[驗證條件,附加規則,驗證時間])array('username','require','用戶名必須填寫'),//密碼必須填寫array('password','require','密碼必須填寫'),//確認密碼必須填寫/與密碼保存一致array('password2','require','確認密碼必須填寫'),array('password2','password','兩次密碼必須一致',0,'confirm'),//驗證郵箱array('user_email','email','郵箱格式必須正確',2),//驗證qq號碼//全部數字、長度5-12位、第一位非0array('user_qq','/^[1-9]\d{4,11}$/','qq格式必須正確'),//手機號碼驗證,正則驗證//學歷必須選擇一項//value值必須在一個范圍內 2,3,4,5,array('user_xueli',array(2,3,4,5),'學歷必須選擇一項',0,'in'),//愛好,必須選擇兩個或以上項目//計算$_POST['user_hobby']這個數組里邊元素的個數array('user_hobby','check_hobby','愛好必須選擇兩項以上',1,'callback'),);//驗證愛好的方法function check_hobby($hobby){//獲取$_POST['user_hobby']具體信息值//這個check_hobby被調用的時候已經把$_POST['user_hobby']//當成是參數給check_hobby了//show_bug($hobby);if(count($hobby) < 2){return false;} else {return true;}}//自定義個性方法進行用戶名和密碼校驗function checkNamePassword(){//sljdlsjdlk} }

    第四個參數,驗證條件
    驗證條件:(可選)包含下面幾種情況:
    Model::EXISTS_VALIDATE 或者0 存在字段就驗證(默認)
    Model::MUST_VALIDATE 或者1 必須驗證
    Model::VALUE_VALIDATE或者2 值不為空的時候驗證

    總結

    以上是生活随笔為你收集整理的ThinkPHP入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。