<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( )實例詳解 #### 1. 功能:當調用的方法不存在或權限不足時自動觸發該方法。 >[info] 框架中每個類幾乎都有這個魔術方法,很實用也很簡單,直接上實例講解。 #### 2. 實例: >[warning] 幾乎每一步都有注釋,如果感到陌生,請參閱《PHP官方手冊》。 ~~~ <?php //創建父類:Member class Member{ //創建受保護屬性:數組 protected $memberdata = array(); //當調用的方法不存在或權限不足時,會自動調用__call方法 public static function __call($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 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 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方法,于是自動觸發父類__call()方法 //父類Member中的__call($func,$arguments)是系統魔術方法 //在__call方法中,方法名set_name轉換為變量$type和$name //并根據$type,完成屬性的動態賦值或讀取操作 //set_name(),set_age()分別完成了對$memberdata[$feature]屬性的動態賦值操作 $user = new User(); $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 = new Profession(); $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>

                              哎呀哎呀视频在线观看