<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # ThinkPHP函數詳解:M函數 [TOC] M函數用于實例化一個基礎模型類,和D函數的區別在于: 1. 不需要自定義模型類,減少IO加載,性能較好; 2. 實例化后只能調用基礎模型類(默認是Model類)中的函數; 3. 可以在實例化的時候指定表前綴、數據庫和數據庫的連接信息; D函數的強大則體現在自定義封裝的模型類有多強,不過隨著ThinkPHP框架的基礎模型類的功能越來越強大,M函數也比D函數越來越實用了。 M函數的調用格式: >[success] **M('[基礎模型名:]模型名','數據表前綴','數據庫連接信息')** ## 實例化基礎模型(Model) 類 在沒有定義任何模型的時候,我們可以使用下面的函數實例化一個模型類來進行操作: ~~~ //實例化User模型 $User = M('User'); //執行其他的數據操作 $User->select(); ~~~ 這種函數最簡單高效,因為不需要定義任何的模型類,所以支持跨模塊調用。缺點也是因為沒有自定義的模型類,因此無法寫入相關的業務邏輯,只能完成基本的CURD操作。 ~~~ $User = M('User'); ~~~ 其實等效于: ~~~ $User = new Model('User'); ~~~ >[danger] M函數和D函數一樣也有單例功能,多次調用并不會重復實例化。M函數的模型名參數在轉換成數據表的時候會自動轉換成小寫,也就是說ThinkPHP的數據表命名規范是全小寫的格式。 ## 實例化其他公共模型類 上面的方式實例化因為沒有模型類的定義,因此很難封裝一些額外的邏輯方法,不過大多數情況下,也許只是需要擴展一些通用的邏輯,那么就可以嘗試下面一種方法。 ~~~ $User = M('\Home\Model\CommonModel:User'); ~~~ 改用法其實等效于: ~~~ $User = new \Home\Model\CommonModel('User'); ~~~ 因為系統的模型類都能夠自動加載,因此我們不需要在實例化之前手動進行類庫導入操作。模型類`\Home\Model\CommonModel`必須繼承Model。我們可以在`\Home\Model\CommonModel`類里面定義一些通用的邏輯方法,就可以省去為每個數據表定義具體的模型類,如果你的項目已經有超過100個數據表了,而大多數情況都是一些基本的CURD操作的話,只是個別模型有一些復雜的業務邏輯需要封裝,那么第一種方式和第二種方式的結合是一個不錯的選擇。 ## 傳入表前綴、數據庫和其他信息 M方法有三個參數, 1. 第一個參數是模型名稱(可以包括基礎模型類和數據庫) 2. 第二個參數用于設置數據表的前綴(留空則取當前項目配置的表前綴) 3. 第三個參數用于設置當前使用的數據庫連接信息(留空則取當前項目配置的數據庫連接信息)例如: ### 實例化Model模型類,并操作db2數據庫中的think_user表。 ~~~ $User = M('db2.User','think_'); ~~~ 如果第二個參數留空或者不傳,表示使用當前項目配置中的數據表前綴。 ### 如果操作的數據表沒有表前綴,那么可以使用: ~~~ $User = M('db1.User',null); ~~~ 表示實例化Model模型類,并操作db1數據庫中的user表。 ### 傳入數據庫的連接信息查詢非常規的數據庫數據 $User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp'); 表示基礎模型類用Model,然后對think_user表進行操作,用user_a賬號進行數據庫連接,操作數據庫是thinkphp。 第三個連接信息參數可以使用DSN配置或者數組配置,甚至可以支持配置參數。 例如,在項目配置文件中配置了: ~~~ 'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp'; ~~~ 則可以使用: ~~~ $User = M('User','think_','DB_CONFIG'); ~~~ ### 基礎模型類和數據庫可以一起使用 ~~~ $User = M('\Home\Model\CommonModel:db2.User','think_'); ~~~ 如果要實例化分層模型的話,利用公共模型類的方式,我們可以使用: ~~~ M('Home/UserLogic:User'); ~~~ 來實例化UserLogic,雖然這樣做的意義不大,因為可以用 ~~~ D('Home/User','Logic'); ~~~ 實現同樣的功能。但是D函數無法實施傳入數據庫連接信息,它可以在自定義Model類中定義屬性$connection。
                  <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>

                              哎呀哎呀视频在线观看