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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 4-3 PHP魔術方法的實現 在設計模式中會使用到面向對象中的一些魔術方法。 魔術方法主要分為以下幾類: * `__get` , `__set` // 操作對象的屬性 * `__call` , `__callStatic` // 訪問對象中的普通方法、靜態方法 * `__toString` // 將對象輸出為字符串使用 * `__invoke` // 把對象當做函數來使用 ### 1. 操作對象的屬性 *D:\wamp\www\demo\oop\framework\Think\Object.php* ~~~ <?php namespace Think; class Object { protected $array = array(); public function __set($key, $value) { var_dump(__METHOD__); $this->array[$key] = $value; } public function __get($key) { var_dump(__METHOD__); return $this->array[$key]; } } ~~~ *D:\wamp\www\demo\oop\framework\index.php* ~~~ $obj = new Think\Object(); $obj->title = 'title'; echo $obj->title; ~~~ 輸出結果: ~~~ string 'Think\Object::__set' (length=19) string 'Think\Object::__get' (length=19) title ~~~ 當給一個對象不存在的變量賦值時,自動調用 `__set()` 方法,讀取一個不存在的對象的值時,自動調用 `__get()` 方法。 ### 2. 訪問對象中的方法 *D:\wamp\www\demo\oop\framework\index.php* ~~~ $obj = new Think\Object(); $obj->demo('name', 'zhangsan'); ~~~ 訪問對象中不存在的方法時,會提示: ~~~ Fatal error: Call to undefined method Think\Object::demo() ~~~ 該方法不存在。 *D:\wamp\www\demo\oop\framework\index.php* ~~~ $obj = new Think\Object(); echo $obj->demo('name', 'zhangsan'); echo $obj::demo('age', 100); ~~~ 接下來,我們在類中定義魔術方法:`__call()` , `__callStatic()` *D:\wamp\www\demo\oop\framework\Think\Object.php* ~~~ public function __call($func, $param) { var_dump($func, $param); return "魔術方法\n"; } static public function __callStatic($func, $param) { var_dump($func, $param); return "魔術方法\n"; } ~~~ 輸出內容: ~~~ string 'demo' (length=4) array (size=2) 0 => string 'name' (length=4) 1 => string 'zhangsan' (length=8) 魔術方法 string 'demo' (length=4) array (size=2) 0 => string 'age' (length=3) 1 => int 100 魔術方法 ~~~ 訪問對象中1個不存在的方法,自動執行魔術方法 `__call`,如果訪問的是靜態方法,自動執行魔術方法 `__callStatc` 。 ### 3. 把對象轉化為字符串 定義一個魔術方法 `__toString()` ~~~ public function __toString() { return __CLASS__; } ~~~ ~~~ $obj = new Think\Object(); echo $obj; ~~~ 輸出內容: ~~~ Think\Object ~~~ 對象本身是不能直接輸出的,當輸出一個對象時,對象會自定回調訪問 `__toString()` 魔術方法。 ### 4. 把對象當做函數 定義一個魔術方法: `__invoke()` ~~~ public function __invoke($param) { var_dump($param); return "__invoke\n"; } ~~~ 當把一個對象當做函數一樣使用,會自動調用魔術方法:`__invoke()` ~~~ $obj = new Think\Object(); echo $obj('zhangsan'); ~~~ 輸出結果: ~~~ string 'zhangsan' (length=8) __invoke ~~~
                  <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>

                              哎呀哎呀视频在线观看