大神瞧瞧哈
class Car {
? ?private static $speed = 10;
? ?
? ?public static function getSpeed() {
? ? ? ?return self::$speed;
? ?}
? ?public static function speedUp() {
? ? ? ?return self::$speed+=10;
? ?}
}
class BigCar extends Car {
? ?public static function start() {
? ? ? ?parent::speedUp();
? ?}
}BigCar::start();
echo BigCar::getSpeed();
這是這章節例子中的,結果是20,我想問的是BigCar::start();是將start()方法執行了一遍得到speed是等于20的,但是start()這個方法中沒有返回時,然后他再用echo BigCar::getSpeed();這種形式來輸出$speed的最終值嗎,是不是就是說在子類中speed執行了以后變成20,在父類屬性中的$speed也變成了20,于是乎調用執行父類中getspeed的方法所以輸出為20.請大神幫我解釋一下,
還有如果我去掉public static function getSpeed() {
? ? ? ?return self::$speed;
? ?}這一段然后末尾變成echo BigCar::start(); ? 然后給parent::speedUp();前面加return也能得到結果是20,這二個有區別嗎,感覺還是這個簡答啊,話有點多,,,,,望詳解。。。。。
2016-09-12
第一,如果你問的是兩種寫法有沒有區別,我想我已經正面回答你。如果這不是你想知道的,請修改你的提問方式。
第二,$speed只有一個內存區域,意思就是你就算在子類中執行了一個方法修改,父類中的$speed值也是有變化的。
2016-09-12
第一,static的變量,是在類初始化的時候就已經保存在內存的,所以$speed只有一個內存區域。
第二,子類在調用start()的時候,執行了Car類的speedUp()方法,將$speed的值加了10. (只要“self::$speed+=10;”執行,無論有沒有return,這個值都已經變成了20)
第三,echo 可以把數據輸出到控制臺。如果echo后面跟的是變量,則把變量的值輸出;如果echo后面跟的是函數,則把函數的返回值(就是return的值)輸出;如果echo后面跟的是賦值運算,則把運算的結果輸出。
所以,你把getSpeed()的return改為echo的之后,執行到這一行的時候,就直接輸出了。
請指正。