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

                ## call_user_func_array 動態調用方法 >[info] 這個函數在Model模型類源碼中得到了大量應用,該函數是PHP 5.2以上版本提供的系統函數,實現了類方法的動態調用。 * * * * * #### 1. 功能:類方法的動態調用 >[info] 注意與另一個函數:call_user_func( )的區別,二者僅僅是參數類型不同,感興趣同學,可參考PHP用戶手冊 * 這里我們詳細講解一下更復雜的:call_user_func_array()函數。 * * * * * #### 2. 基本語法: ~~~ call_user_func_array([ '類名','方法名' ], [ 參數數組 ]) ~~~ * 例如: ~~~ call_user_func_array([$class,$method], $param_arr); ~~~ * * * * * #### 3. 實例演示: >[info] 模型操作中,我們經常會靜態調用數據庫類的連貫方法,而這些方法并不在模型類中定義,那么你有沒有想過,這是如何實現的呢? * 下面我們就演示這一過程: >[info] 為了演示方便,我們先做如下約定: 1. 為模擬真實環境,定義三個類:Model類,模型類User,數據庫查詢類Query; 2. 我們采用靜態調用來實現這個過程; 3. 為了簡化操作,我們用二維數組模擬數據表中的記錄; * 完整代碼如下: ~~~ <?php //創建Model類,因該類為抽象類,必須定義子類才可以使用 abstract class Model{ //如果調用的靜態方法不存在,則自動觸發:__callStatic public static function __callStatic($method,$param_arr){ //這里我們直接設置了$class類名,實際工作中應該用內部方法來實現 $class = 'Query'; //動態調用指定類$class中的指定方法$mothod,參數以數組方式$param_arr傳入 return call_user_func_array([$class,$method], $param_arr); } } //創建數據庫查詢類:Query class Query{ //因為我們模擬的是靜態調用,這里select()必須設置與靜態方法 public static function select($param_arr){ //直接返回調用數據: return $param_arr; } } //創建自定義模型類:User,假定與數據表User綁定 class User extends Model{ //這里是自定義模型類的代碼 } //1. 創建一個自定義結果集,以二維數組呈現,來模擬數據庫查詢結果 $data = [ ['id' => 1,'name' => 'Peter','age' => 20,'salary' => 4000], ['id' => 2,'name' => 'Jack','age' => 26,'salary' => 5000], ['id' => 3,'name' => 'Tom','age' => 30,'salary' => 6800], ]; //2. 模型類User靜態調用select()方法,參數是數據庫查詢結果集(以二維數據模擬) //注意:User類中并沒有定義:靜態方法 select(),此時會自動調用父類Model中的__callStatic()方法 //該靜態魔術方法會自動將當前調用的select($data)的方法名和參數傳給: //call_user_func_array(['Query','select'], $data); $result=User::select($data); //3. 格式化輸出查詢結果 //設置表頭信息 $caption = '<h3 align="center">學生信息表</h3>'; //將傳入的表中記錄集,以表格方式格式化輸出 //設置表頭信息 $table = $caption.'<table border="1" cellspacing="0" cellpadding="0" width="300" align="center"><th>id</th><th>姓名</th><th>年齡</th><th>工資</th>'; //根據表中記錄數量,循環輸出 foreach ($result as $value) { $table = $table. '<tr>'; $table = $table. '<td>'.$value['id'].'</td>'; $table = $table. '<td>'.$value['name'].'</td>'; $table = $table. '<td>'.$value['age'].'</td>'; $table = $table. '<td>'.$value['salary'].'</td>'; $table = $table. '</tr>'; } echo $table; ~~~ * 運行結果如下: 學生信息表 |id |姓名| 年齡| 工資| | --- | --- | --- | --- | |1| Peter| 20| 4000| |2| Jack| 26| 5000| |3| Tom |30| 6800| #### 4. 總結: >[danger] 理解了這個實例,基本上就明白了模型與數據庫之間是如何協調工作的啦!
                  <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>

                              哎呀哎呀视频在线观看