<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之旅 廣告
                給大家補充的基礎知識點,必須相當重要。如果這都不理解,源碼分析就沒有看的必要了。 首先,我們今天來看一下php的魔術方法 __set 和 __get。 在php中,有很多魔術方法,魔術方法都是以兩個下劃線 __ 開頭的保留方法。 當然,這些魔術方法都是針對類而存在的。 __set: 給類不存在或者不可訪問的屬性賦值時會被自動調用 __get: 讀取類不存在或者不可訪問的屬性時會被自動調用 二者的原型如下 ~~~ public mixed __get ( string $name ) public void __set ( string $name , mixed $value ) ~~~ 我們來看一個例子 ~~~ class A { public $name; } $a = new A; $a->name = 'zhangsan'; echo $a->name; ~~~ 正常情況下,上面的代碼會正確的輸出 zhangsan 的結果,沒有問題。 此時,假如我們輸出對象a不存在的age屬性,頁面上會提示我們 A::$age 未定義。 ~~~ echo $a->age; Notice: Undefined property: A::$age ~~~ 當然,有同學可能會說,我聲明一個 public $a; 不就行了嗎?可以呀,不過像你這樣砸場子的話,我們就沒有繼續說下去的必要了。 我們對A類增加一個 __get 方法,看看這個會被自動調用的方法是啥效果 ~~~ class A { public $name; public function __get($name) { var_dump($name); } } ~~~ 依然訪問 $a->age 屬性 ~~~ echo $a->age; ~~~ 其結果瞬間由剛才的Notice提醒變成了 ~~~ string(3) "age" ~~~ 看來沒問題。 你可以再寫一個protected和private類型的屬性,其結果跟不存在的age屬性一樣,會自動調用 __get 方法。但是 public 類型的 name 屬性不會調用該方法。 現在,我們再為A類增加一個 __set 方法 ~~~ class A { public $name; public function __get($name) { // var_dump($name); } public function __set($name, $value) { var_dump($name, $value); } } ~~~ 我們為不存在的屬性 age 賦值,看看效果 ~~~ $a = new A; $a->age = 20; ~~~ 結果如下 ~~~ string(3) "age" int(20) ~~~ 當然,protected和private類型的屬性被賦值時也可以得到相同的結果,可以自己嘗試下。 so easy,那么,我們講這些的意義是什么? 別急別急,鑒于以上,我們再看一個問題: 假如我們有一個B類以及一個配置數組如下 ~~~ class B { public $name; } $config = [ 'class' => 'B', 'name' => 'zhangsan', 'age' => 20, ]; ~~~ 如何根據$config的配置,來創建一個B對象并為B的對象屬性賦值? 先思考一下再繼續閱讀哦。 來看一下我們是怎么使用__set和__get實現的 B類的實現 ~~~ class B { public $name; private $_definitions = []; public function __get($name) { return isset($this->_definitions[$name]) ? $this->_definitions[$name] : null; } public function __set($name, $value) { $this->_definitions[$name] = $value; } } ~~~ 實例化上述類并通過$config為對象b賦值 ~~~ $config = [ 'class' => 'B', 'name' => 'zhangsan', 'age' => 20, ]; $class = $config['class']; unset($config['class']); $object = new $class; foreach ($config as $k => $v) { $object->$k = $v; } var_dump($object->name); var_dump($object->age); ~~~ 結果如下 ~~~ string(8) "zhangsan" int(20) ~~~ 有同學終于緩過神了,這有點像什么?這是不是有點像yii2中的配置項?和laravel某些東西也很相似
                  <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>

                              哎呀哎呀视频在线观看