1. 程式人生 > >php面向物件之-延遲繫結複習-132

php面向物件之-延遲繫結複習-132

<span style="font-size:14px;"><?php 
//01.php 
/**** 
燕十八 公益PHP講堂 
論  壇: http://www.zixue.it 
微  博: http://weibo.com/Yshiba 
YY頻道: 88354001 
****/ 
/*** 
====筆記部分==== 
***/ 
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 
Stu::t2(); // 嚶嚶,16,2 
?></span><span style="font-size: 18px;">
</span>


對於Stu:t1()的結果:先在Stu類中找t1, 找不到,到Human類中找,也沒有,繼續找Animal,有t1, 因此綁定了Animal                                     類,所以結果應該是self繫結為Animal,因此應該 是 echo $Animal::age;   echo $Animal::leg;  

對於Stu:t2()的結果:先在Stu類中找t2, 找不到,到Human類中找,也沒有,繼續找Animal,有t2,而此前加的是                                           static,先繫結Animal,再繫結Stu類,所以結果應該是

self繫結為Animal,因此應該 是 echo                                           $Animal::leg;   echo $Stu::age 。

(不要問為什麼會這樣,我也不知道,因為php中的執行機制就是這樣)