大神瞧瞧哈

来源:2-6 PHP类和对象之Static静态关键字

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

写回答 关注

2回答

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

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

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

    a10282...

    非常感谢!

    2016-09-12 12:56:11

    共 1 条回复 >

  • 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的之后,执行到这一行的时候,就直接输出了。

    请指正。

    a10282...

    能不能正面回答下我的所有问题。。。。第一,static的变量,是在类初始化的时候就已经保存在内存的,所以$speed只有一个内存区域。//这段话的意思是我后面speed无论如何变化他的变量属性值都不会变了吗

    2016-09-12 11:57:08

    共 1 条回复 >

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181907 学习 · 2661 问题

查看课程

相似问题