<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 在這里咱們從三個方面對代碼進行優化 ### 1\. 安全性 > 提高安全性,減少代碼量,提高執行效率,減輕服務器壓力 ### 2\. 規范性 > 寫程序要養成良好的習慣,使寫出的代碼更為規范。每一個框架通常情況下,都有自己的一套規范。所以在使用其進行開發時,一定要書寫規范。 ### 3\. 代碼的復用性 > 提高代碼的復用性,減少了代碼量,提高了程序的可讀性。 ## 1\. 安全性代碼優化 > 在這里從以下兩個方面進行優化 > > 1. 加入請求類型判斷,只有符合條件的請求才會進向后續的操作。如果請求類型不對,直接丟棄! > 2. 對用戶提交的數據進行過濾(ThinkPHP官方有詳細的說明) ## 2\. 代碼規范化 > ThinkPHP是基于MVC(模型-視圖-控制器)的方式來組織。雖然MVC框架并不要求 M、V、C同時存在,但是MVC的開發模式是比較合理的。所以在開發時,盡量嚴格遵循MVC的開發模式。 > 在這里會引入ThinkPHP中模型的概念。TP中的模型可以理解為具有特殊功能的類。在這里咱們使用的是TP框架,所以要遵循TP中的框 架結構。 > 要使用MVC模式進行開發,首先需要知道并理解模型的作用。 > 每個模塊擁有獨立的MVC類庫及配置文件,一個模塊下面有多個控制器負責響應請求,而每個控制器其實就是一個獨立的控制器類。 > 控制器主要負責請求的接收,并調用相關的模型處理,并最終通過視圖輸出。嚴格來說,控制器不應該過多的介入業務邏輯處理。 > 注意:使用模型獲取數據時,一般情況下返回的是對象,而數據庫類返回的是數組。所以在使用時,在實際應用中需要了解模型對象與數組之前的轉換。 > 1. 模型對象支持數組方式訪問 ~~~ $user = User::find(1); echo $user->name ; // 有效 echo $user['name'] // 同樣有效 $user->name = 'thinkphp'; // 有效 $user['name'] = 'thinkphp'; // 同樣有效 $user->save(); ~~~ 2. 可以使用toArray方法將當前的模型實例輸出為數組 ~~~ $user = User::find(1); dump($user->toArray()); ~~~ 3. 支持設置不輸出的字段屬性 ~~~ $user = User::find(1); dump($user->hidden(['create_time','update_time'])->toArray()); ~~~ 4. 數組輸出的字段值會經過獲取器的處理,也可以支持追加其它獲取器定義(不在數據表字段列表中)的字段 ~~~ $user = User::find(1); dump($user->append(['status_text'])->toArray()); ~~~ 5. 支持設置允許輸出的屬性 ~~~ $user = User::find(1); dump($user->visible(['id','name','email'])->toArray()); ~~~ 6. 如果是數據集查詢的話有兩種情況,由于默認的數據集返回結果的類型是一個數組,因此無法調用toArray方法,必須先轉成數據集對象然后再使用toArray方法,系統提供了一個collection助手函數實現數據集對象的轉換,代碼如下: ~~~ $list = User::all(); if($list) { $list = collection($list)->toArray(); } ~~~ 7. 可以設置模型的數據集返回類型,如果設置了返回類型,那么就可以直接轉數組了。 ~~~ <?php namespace app\index\model; use think\Model; class User extends Model { protected $resultSetType = 'collection'; } ~~~ > 以上關于模型數據的處理,一定要熟悉 ### 實例: 以管理員列表為例 1. 沒有使用模型時,獲取數據直接在控制器的`index`方式中使用數據庫類進行操作 ~~~ <?php //控制器代碼片段 ...... public function index() { //獲取管理員信息-分頁 $list=db('manager')->order('id Desc')->select(); $this->assign('list',$list); return view(); } ...... ?> ~~~ 2. 引入模型后,的代碼片段如下 ~~~ <?php //控制器代碼片段 public function index() { //獲取管理員信息-分頁 //實例化manager模型 $list=ManagerModel::getlistall(); $this->assign('list',$list); return view(); } ?> ~~~ ~~~ <?php //模型中代碼片段 //獲取所有管理員數據 public static function getlistall(){ $list=self::all(function($query){ $query->order('id', 'Asc'); })->toArray(); return $list; } ?> ~~~ ## 3.代碼的復用性 > 在開發過程中,要盡量提高代碼的復用性。減少代碼量,提交開發效率。 ### 實例 在這里以以下兩個功能代碼為例進行優化: #### 1\. 關于異步請求返回`json`數據的代碼優化 原始控制器代碼: ~~~ ........ if(!$result){ return json(['code'=>0,'msg'=>"修改失敗"]); } return json(['code'=>1,'msg'=>"修改成功"]); ........ ~~~ > 代碼雖然不多,但是每次都要寫`'code'=>1`和`'msg'=>''`,所以在這里對基進行優化 > 化優方法,寫一個函數來組織返回數據,函數代碼如下: ~~~ <?php function returnjson($code=1,$msg=""){ return json(['code'=>$code,'msg'=>$msg]); }; ~~~ 優化后的控制器代碼如下: ~~~ <?php ........ if(!$result){ return returnjson(0,"修改失敗"); } return returnjson(0,"修改成功"); ........ ~~~ > 優化后的代碼,看似代碼量有所增加,實際上更加快捷。 #### 2\. 管理加管理員和修改管理員 > 添加管理員和修改管理員,通過分析代碼可以發現,兩者的代碼相似度非常高,所以可以考慮一下,能不能將這兩部分的代碼進行合并。 ##### **分析:** 兩者的不同點 1. 提交的數據不同,修改管理員時,需要提交所修改管理員的ID 2. 所使用的驗證場景不同 3. 修改和添加所使用的模型方法同 兩者的相同點 1. 數據表相同 2. 驗證器相同 3. 模型相同 4. 數在的接和返回形式相同 ##### 合并后的方法如下(模型中): ~~~ //添加/修改管理員 public static function store($data){ if(isset($data['id'])){ $scene='edit'; $msg="修改"; $action="update"; }else{ $scene='add'; $msg="添加"; $action="create"; } //驗證數據的合法性 $valiManager=validate("Manager"); if(!$valiManager->scene($scene)->check($data)){ return returnjson(0,$valiManager->getError()); } //寫入數據庫 unset($data['repasswd']); $result=self::$action($data); if(!$result){ return returnjson(0,"{$msg}失敗"); } return returnjson(1,"{$msg}成功"); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看