a10282465693872396
2016-09-12 11:09
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,这二个有区别吗,感觉还是这个简答啊,话有点多,,,,,望详解。。。。。
第一,如果你问的是两种写法有没有区别,我想我已经正面回答你。如果这不是你想知道的,请修改你的提问方式。
第二,$speed只有一个内存区域,意思就是你就算在子类中执行了一个方法修改,父类中的$speed值也是有变化的。
第一,static的变量,是在类初始化的时候就已经保存在内存的,所以$speed只有一个内存区域。
第二,子类在调用start()的时候,执行了Car类的speedUp()方法,将$speed的值加了10. (只要“self::$speed+=10;”执行,无论有没有return,这个值都已经变成了20)
第三,echo 可以把数据输出到控制台。如果echo后面跟的是变量,则把变量的值输出;如果echo后面跟的是函数,则把函数的返回值(就是return的值)输出;如果echo后面跟的是赋值运算,则把运算的结果输出。
所以,你把getSpeed()的return改为echo的之后,执行到这一行的时候,就直接输出了。
请指正。
PHP进阶篇
181907 学习 · 2661 问题
相似问题