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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                1. 以static::來調用,是在運行的那個時刻才執行綁定操作; 2. 父類中有個方法是延遲綁定的,在子類::調用這個方法的時候它**又回到調用的子類開始向上找**; **example1:** ```php class Human { public static function whoami() { echo '來自父類的whoami在執行'; } public static function say() { self::whoami(); // 子類內沒有say方法,找到了父類這里 // 在這里的self 指的是 父類 } public static function say2() { static::whoami(); // 子類也沒有say2方法,又找到父類這里 // 但是父類用static::whoami, // 指調用你子類自己的whoami方法 } } class Stu extends Human{ public static function whoami () { echo '來自子類的whoami在執行'; } } // 來自父類的whoami在執行 Stu::say();//調用Stu類的say方法,但Stu類沒有say方法,就向其父類尋找,找到父類以后,發現父類的say方法里面又調用self::whoami();此時self里面其實是有兩個whoami的方法,但由于本次調用發生的環境是在父類的say方法里面,所以它調用的是父類的whoami方法,不調用子類的whoami方法; echo PHP_EOL; // 來自子類的whoami在執行 Stu::say2(); //調用Stu類的say2方法,但Stu類沒有say2方法,就向其父類尋找,找到父類say2以后,發現父類的say2方法里面用了static延遲綁定了whoami方法,而此時發生調用的子類里面有whoami方法(如果沒有就向父類尋找),所以在此時是綁定在子類的whoami上,所以這里調用的是子類的whoami方法; ``` **example2:** ```php class Animal { const age = 1; public static $leg = 4; public static function cry() { echo '嗚嗚<br />'; } public static function t1() { self::cry(); echo self::age,'<br />'; echo self::$leg,'<br />'; } public static function t2() { static::cry(); echo static::age,'<br />'; echo static::$leg,'<br />'; } } class Human extends Animal { public static $leg = 2; public static function cry() { echo '哇哇<br />'; } } class Stu extends Human { const age = 16; public static function cry() { echo '嚶嚶<br />'; } } Stu::t1(); //嗚嗚,1,4 /* ↑↑:一直找到Animal類,Animal類的t1方法是普通綁定,所以是嗚嗚,1,4 */ Stu::t2(); // 嚶嚶,16,2 /* ↑↑:一直找到Animal類,Animal類的t2方法是延遲綁定,又回到Stu類開始找,Stu類有cry方法,所以是嚶嚶,有age屬性所以是16,沒有leg屬性,然后向上找,一直找到既可,所以是2 */ ``` ## new static()與new self() 1. self - 就是這個類,是代碼段里面的這個類。new self就是實例化本類; 2. static - PHP 5.3加進來的只得是當前這個類,有點像$this的意思,從堆內存中提取出來,訪問的是當前實例化的那個類,那么 static 代表的就是那個類。 ~~~php <?php class A { static public function get_self() { return new self(); } static public function get_static() { return new static(); } } class B extends A { } echo get_class(A::get_self());//A echo get_class(A::get_static()); // A echo get_class(B::get_self()); // A: 實例化B::get_self()對象里面的self()所在哪個類,就返回哪個類。 echo get_class(B::get_static()); // B: 訪問的是當前類,有點像this; 因為其是B繼承了的get_static方法,而調用的。 ~~~ >[info] 由此可見,他們的區別只有在繼承中才能體現出來,如果沒有任何繼承,那么這兩者是沒有區別的。但如果是在靜態方法內new本類的話,最好還是用new static();
                  <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>

                              哎呀哎呀视频在线观看