问答详情
源自:2-6 PHP类和对象之Static静态关键字

大神瞧瞧哈

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,这二个有区别吗,感觉还是这个简答啊,话有点多,,,,,望详解。。。。。

提问者:a10282465693872396 2016-09-12 11:09

个回答

  • qq_李勃_03743122
    2016-09-12 12:21:47
    已采纳

    第一,如果你问的是两种写法有没有区别,我想我已经正面回答你。如果这不是你想知道的,请修改你的提问方式。

    第二,$speed只有一个内存区域,意思就是你就算在子类中执行了一个方法修改,父类中的$speed值也是有变化的。

  • qq_李勃_03743122
    2016-09-12 11:43:30

    第一,static的变量,是在类初始化的时候就已经保存在内存的,所以$speed只有一个内存区域。

    第二,子类在调用start()的时候,执行了Car类的speedUp()方法,将$speed的值加了10. (只要“self::$speed+=10;”执行,无论有没有return,这个值都已经变成了20)

    第三,echo 可以把数据输出到控制台。如果echo后面跟的是变量,则把变量的值输出;如果echo后面跟的是函数,则把函数的返回值(就是return的值)输出;如果echo后面跟的是赋值运算,则把运算的结果输出。

    所以,你把getSpeed()的return改为echo的之后,执行到这一行的时候,就直接输出了。

    请指正。