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

                ## 魔術方法 :__callStatic( )實例詳解 #### 1. 功能:當調用的靜態方法不存在或權限不足時自動觸發該方法。 >[info] 這個方法很重要,ThinkPHP5框架源碼中幾乎每個類都有這個方法。只有對這個方法熟悉,你才能完全了解框架的執行流程。 #### 2. 實例: >[warning] 每一關鍵步驟,都有詳細注釋,手把手,一定能學會 ~~~ <?php //創建父類:Member class Member{ //創建受保護靜態屬性:數組 protected static $memberdata = array(); //當調用的靜態方法不存在或權限不足時,會自動調用__callStatic方法 public static function __callStatic($func, $arguments){ //explode():用'_'字符串分割為數組 //list():將數組元素轉為對應的獨立變量:$type,$name list($type, $name) = explode('_', $func); //如何$type字符串不在數組'set'和'get'中任何一個 //或者$name為空的話,則調用的靜態方法名稱不正確,直接返回'空'; if(!in_array($type, array('set','get')) || $name==''){ return ''; } //獲取調用當前方法的類名 //即:當前方法靜態綁定的類名: 如 User $feature = get_called_class(); //判斷$type值 switch($type){ //如果$type = 'set',則是給屬性$memeberdata賦值 case 'set': //將當前方法的參數數組的值$arguments[0] //賦給屬性 $memberdata[$feature][$name]:注意是二維數組 //當前方法只有一個值:$arguments[0] self::$memberdata[$feature][$name] = $arguments[0]; break; //如果$type = 'get',則是獲取屬性$memeberdata的值 case 'get': //如果 self::$memberdata[$feature][$name]存在則返回該值,否則返回:空 return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : ''; break; default: } } } //創建子類:User,繼承自:Member類 class User extends Member{ //定義公共靜態方法:show(),用來輸出數據 public static function show(){ //獲取調用當前方法的類名,如:User $feature = get_called_class(); //如果self::$memberdata[$feature]屬性存在 if(self::$memberdata[$feature]){ //輸出與當前類所對應的$memberdata[$feature]屬性值 foreach(self::$memberdata[$feature] as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } //創建子類:Profession,繼承自:Member類 class Profession extends Member{ //定義公共靜態方法:show(),用來輸出數據 public static function show(){ //獲取調用當前方法的類名,如:Profession $feature = get_called_class(); //如果self::$memberdata[$feature]屬性存在 if(self::$memberdata[$feature]){ //輸出與當前類所對應的$memberdata[$feature]屬性值 foreach(self::$memberdata[$feature] as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } //靜態調用set_name(),set_age() //當前類User和父類中都沒有set_name靜態方法,于是自動觸發父類__callStatic()方法 //父類Member中的__callStatic($func,$arguments)是系統魔術方法 //在__callStatic方法中,方法名set_name轉換為變量$type和$name //并根據$type,完成屬性的動態賦值或讀取操作 //set_name(),set_age()分別完成了對$memberdata[$feature]屬性的動態賦值操作 User::set_name('ThinkPHP'); User::set_age(10); User::show(); //靜態調用set_profession(),set_price() //當前類User和父類中都沒有set_name靜態方法,于是自動觸發父類__callStatic()方法 //父類Member中的__callStatic($func,$arguments)是系統魔術方法 //在__callStatic方法中,方法名set_name轉換為變量$type和$name //并根據$type,完成屬性的動態賦值或讀取操作 //set_name(),set_age()分別完成了對$memberdata[$feature]屬性的動態賦值操作 Profession::set_lession('模型'); Profession::set_teacher('理達課堂'); Profession::show(); ~~~ * 運行結果: ~~~ name:ThinkPHP age:10 lession:模型 teacher:理達課堂 ~~~ #### 4. 總結: >[success] 該方法與上節課的__call( )方法,有很多相似之外,請注意區分
                  <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>

                              哎呀哎呀视频在线观看