<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國際加速解決方案。 廣告
                [TOC] ## 魔術方法 ### `__construct` 構造方法 * 構造方法 ``` function __construct([參數列表]) { 方法體 //通常用來對成員屬性進行初始化賦值 } ``` **** ### `__destruct` 析構方法 * 析構方法 ``` function __destruct() { //方法體 } ``` **** ### `__call()` 對象中調用一個不可訪問方法時調用 > * `string $function_name, array $arguments` > * 第一個參數 `$function_name` 會自動接收不存在的方法名, > * 第二個 `$arguments` 則以數組的方式接收不存在方法的多個參數。 ``` /** * 聲明此方法用來處理調用對象中不存在的方法 */ function __call(string $function_name, array $arguments) { echo "你所調用的函數:" . $function_name. "(參數:" ; // 輸出調用不存在的方法名 print_r($arguments); // 輸出調用不存在的方法時的參數列表 echo ")不存在!<br>\n"; // 結束換行 } ``` **** ### `__callStatic()` 用靜態方式中調用一個不可訪問方法時調用 > * 同 `__call` 的參數 一樣 ``` /** * 聲明此方法用來處理調用對象中不存在的方法 */ public static function __callStatic($function_name, $arguments) { echo "你所調用的靜態方法:" . $function_name. "(參數:" ; // 輸出調用不存在的方法名 print_r($arguments); // 輸出調用不存在的方法時的參數列表 echo ")不存在!<br>\n"; // 結束換行 } ``` **** ### `__get()` 獲得一個類的成員變量時調用 > * `$propertyName`屬性名作為參數傳入并處理 > * 通過它可以在對象的外部獲取私有成員屬性的值 ``` /** * 在類中添加__get()方法,在直接獲取屬性值時自動調用一次,以屬性名作為參數傳入并處理 * @param $propertyName * * @return int */ public function __get($propertyName) { return $this->$propertyName; } ``` **** ### `__set()` 設置一個類的成員變量時調用 >* `$property, $value` 參數名和值 ``` /** * 聲明魔術方法需要兩個參數,真接為私有屬性賦值時自動調用,并可以屏蔽一些非法賦值 * @param $property * @param $value */ public function __set($property, $value) { $this->$property = $value; } ``` **** ### `__isset()` 當對不可訪問屬性調用`isset()`或`empty()`時調用 > * `$content` 類參數 ``` /** * @param $content * * @return bool */ public function __isset($content) { echo "當在類外部使用isset()函數測定私有成員{$content}時,自動調用<br>"; echo isset($this->$content); } ``` **** ### `__unset()` 當對不可訪問屬性調用`unset()`時被調用。 > * `$content` 類參數 ``` /** * @param $content * * @return bool */ public function __unset($content) { echo "當在類外部使用unset()函數來刪除私有成員時自動調用的<br>"; echo isset($this->$content); } ``` **** ### `__sleep()` 執行`serialize()`時,先會調用這個函數 > * `serialize()` 函數會檢查類中是否存在一個魔術方法 `__sleep()` > * 如果存在,則該方法會優先被調用,然后才執行序列化操作。 > * 此功能可以用于清理對象,并返回一個包含對象中所有應被序列化的變量名稱的數組。 > * 如果該方法未返回任何內容,則 `NULL` 被序列化,并產生一個 `E_NOTICE` 級別的錯誤。 > * `__sleep()` 不能返回父類的私有成員的名字。這樣做會產生一個 `E_NOTICE` 級別的錯誤。可以用 `Serializable` 接口來替代。 > * 作用: > `__sleep()` 方法常用于提交未提交的數據,或類似的清理操作。同時,如果有一些很大的對象,但不需要全部保存,這個功能就很好用。 ``` /** * @return array */ public function __sleep() { echo "當在類外部使用serialize()時會調用這里的__sleep()方法<br>"; $this->name = base64_encode($this->name); return array('name', 'age'); // 這里必須返回一個數值,里邊的元素表示返回的屬性名稱 } ``` **** ### `__wakeup()` 執行`unserialize()`時,先會調用這個函數 > * `__wakeup()` 經常用在反序列化操作中,例如重新建立數據庫連接,或執行其它初始化操作。 ``` /** * __wakeup */ public function __wakeup() { echo "當在類外部使用unserialize()時會調用這里的__wakeup()方法<br>"; $this->name = 2; $this->sex = '男'; // 這里不需要返回數組 } ``` **** ### `__toString()` 類被當成字符串時的回應方法 >* PHP 5.2.0 之前,`__toString()`?方法只有在直接使用于?`echo`或?`print`?時才能生效。 >* PHP 5.2.0 之后,則可以在任何字符串環境生效(例如通過?`printf()`,使用?`%s`?修飾符),但不能用于非字符串環境(如使用?`%d`?修飾符)。 >* 自 PHP 5.2.0 起,如果將一個未定義?`__toString()`?方法的對象轉換為字符串,會產生?`E_RECOVERABLE_ERROR`?級別的錯誤。 ``` public function __toString() { return 'go go go'; } ``` **** ### `__invoke()` 調用函數的方式調用一個對象時的回應方法 ``` public function __invoke() { echo '這可是一個對象哦'; } $person = new Person('小明'); // 初始賦值 $person(); ``` **** ### `__set_state()` 調用var_export()導出類時,此靜態方法會被調用。 > * 本方法的唯一參數是一個數組,其中包含按 array('property' => value, ...) 格式排列的類屬性 ``` public static function __set_state($an_array) { $a = new Person(); $a->name = $an_array['name']; return $a; } ``` **** ### `__clone()` 當對象復制完成時調用 ``` public function __clone() { echo __METHOD__."你正在克隆對象<br>"; } $person = new Person('小明'); // 初始賦值 $person2 = clone $person; ``` **** ### `__autoload()` 嘗試加載未定義的類 > * `spl_autoload_register` 也可通過該函數注冊 自定義 加載函數 > * 魔術函數 ,跟普通函數調用方式一樣,不寫在類里面 ``` /** * 文件autoload_demo.php * */ function __autoload($className) { $filePath = "project/class/{$className}.php"; if (is_readable($filePath)) { require($filePath); } } ``` **** ### `__debugInfo()` 打印所需調試信息 > * 該方法在PHP 5.6.0及其以上版本才可以用 ``` /** * @return array */ public function __debugInfo() { return [ 'propSquared' => $this->prop ** 2, ]; } ```
                  <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>

                              哎呀哎呀视频在线观看