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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 說明 魔術方法就是在特定場景下不需要調用而自動執行的方法。因為有魔術方法,所以我們的類可以寫得很靈活~ ``` __construct #構造方法,在類被實例化時自動調用,一般用于初始化操作; __destruct #析構方法,對象被銷毀時自動調用; __clone() #克隆方法,當對象被克隆時,將會自動調用 __get($key) #屬性獲取方法,當對象要調用一個被保護或不存在的屬性時,__get方法就會自動被調用,并傳入調用的屬性名稱; __set($key,$val) # 屬性設置方法,當對象設置一個被保護或不存在的屬性時,__set會被執行,并傳入要設置的屬性名稱和屬性值,注意這里的設置令對象本身沒有發生改變,除非更改操作是發生在__set方法內;但無論如何,都不可以為對象增加本來就沒有的屬性,只有對已有的屬性進行操作; __isset($key) # 當用isset判斷一個對象是否有這個屬性,并且這個屬性是被保護或者不存在時被自動執行,并傳入判斷的屬性名稱; __unset($key) # 同上,當用unset刪除一個對象的保護屬性或未存在的屬性時,自動被執行; __isset($key) #__isset方法如果返回一個為true的值時,isset的判斷就會失效,不管本類有沒有其判斷的屬性,isset都會返回真; __call($method,$arguments) # 當對象在調用一個被保護或不存在的方法時,會自動執行,并傳入兩個參數$method為方法嗎,$arguments為該方法的參數數組; __callStatic($method,$arguments) # 當調用了類當中某個被保護或不存在的靜態方法時,會自動執行,并傳入兩個參數$method為方法,$arguments為該方法的參數數組;注意,是靜態方法,并且是php5.3新增的魔術方法; __toString() # 輸出對象引用時自動調用; __invoke() # $obj = class();$obj()時執行該函數 __sleep() # 在類序列化時調用 __wakeup() # 在類反序列化時調用 ``` ```php <?php #魔術方法概覽: class magic{ private $privateProperty = "被保護的屬性"; public function __construct(){ echo "我是魔術構造方法,本類被實例化的時候我就會自動執行" . "<hr />"; } public function __toString(){ echo 'hahaha,我是toString'; return $this -> privateProperty; } public function __invoke(){ echo '類被實例為對象后,可以直接當做方法調用,調用的就是我~'; } public function func(){ echo "這是一個普通的方法 <br />"; } private function privateFunc(){ echo "這是一個被保護的方法 <br />"; } public function __destruct(){ echo "我是析構方法,在對象被銷毀(代碼執行完、\$obj被賦值為NULL或被unset)時,我會被自動調用 <br />"; echo "<strong>貌似對象被克隆的時候,我也會自動執行</strong><hr />"; } public function __clone(){ echo "我是克隆魔術方法,當對象被clone時,我會被自動執行. <hr />"; } public function __get($key){ echo "我是__get方法,當對象調用一個被保護或不存在的屬性時,我會被執行,并傳入調用的屬性名稱 -> {$key} <hr />"; } public function __set($key , $val){ echo "我是__set方法,當對象設置一個被保護或不存在的屬性時,我會被執行,并傳入要設置的屬性名稱->\"{$key}\"和屬性值->\"{$val}\";<br /><strong>注意,這里的設置并沒有令對象本身的屬性值發生改變或增加</strong> <hr />"; /* __set方法的使用: 1.利用本方法預留一個接口,有條件的限制類外部操作類內部被保護的屬性; 2.框架中一般private一個$data的數組,用set方法對其增加數組元素,然后來操作這個數組; */ } public function __isset($key){ echo "我是__isset方法,當isset判斷對象的被保護或不存在屬性時,我會被執行,并傳入被判斷的屬性名稱 ->\"{$key}\" <br /> <storng>注意,本方法如果返回一個為true的值時,isset的判斷就會失效,不管本類有沒有其判斷的屬性 ->\"{$key}\",都會返回真</storng> <hr />"; return true; } public function __unset($key){ echo "我是__unset方法,當unset對象的被保護或不存在屬性時,我會被執行,并傳入要被unset的屬性名稱 ->\"{$key}\" <hr />"; } public function __call($method , $arguments){ echo "我是__call方法,當對象在調用一個被保護或不存在的方法時,我會被調用,并傳入兩個參數,\$method ----> \"{$method}\"(方法名); \$arguments ---->(參數數組)"; print_r($arguments); echo "<hr />"; } public static function __callStatic($method , $arguments){ echo "我是__callStatic方法,當調用了類當中某個被保護或不存在的靜態方法時,我會被調用,并傳入兩個參數,\$method ----> \"{$method}\"(方法名); \$arguments ---->(參數數組)"; print_r($arguments); echo "<strong>注意:只能是類::staticMethod,并且本方法是php5.3版本才更新的</strong>"; echo "<hr />"; } } $obj = new magic(); # __invoke $obj(); //5.3以后這樣搞就等于是直接調用類里面的__invoke()方法 # __toString //如果沒有__toString就會報錯;Object of class magic could not be converted to string //但是有__toString方法的話,不僅toString方法會被調用,并且還會返回toString中返回的值; echo $obj; # __clone; // $obj1 = clone $obj; #__get($key)獲取保護和不存在的屬性↓↓; $obj->privateProperty; //調用被保護的屬性; $obj->zxg; //調用不存在的屬性; #__set($key,$val)設置保護和不存在的屬性↓↓: print_r($obj); echo " <hr />"; $obj->privateProperty = "通過__set方法改變了屬性值;"; $obj->zxg = "xgg"; //未存在的屬性; print_r($obj);//$obj本身沒有發生改變,除非更改操作是發生在__set方法內;但無論如何,都不可以為對象增加屬性,只有對已有的屬性進行操作; echo " <hr />"; #__isset($key)方法的使用 echo isset($obj->jyh) ? "有jyh屬性(事實上是沒有這個屬性的,但__isset方法返回真,其就為真)" : "沒有jyh屬性"; echo " <hr />"; #__unset($key)方法的使用 unset($obj->zxg); #__call($method,$arguments) $obj->privateFunc('arg1' , 'arg2' , 'arg3'); #__callStatic($method,$arguments) magic::zhouzhou(27 , 'pig'); ?> ```
                  <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>

                              哎呀哎呀视频在线观看