为了账号安全,请及时绑定邮箱和手机立即绑定

为啥子也是20

<?php
class Car {
    private static $speed = 10;
    
    public function getSpeed() {
        return self::$speed;
    }
    
    //在这里定义一个静态方法,实现速度累加10
    
    public static function speedUp(){
       return self::$speed+=10;
    }
}
$car = new Car();
echo Car::speedUp(); //调用静态方法加速20
echo $car->getSpeed();  //调用共有方法输出当前的速度值20

echo $car->getSpeed(); 这句话  怎么也是调用跟echo Car::speedUp();一样的啊?

echo $car->getSpeed();   这个不是直接调用前面那个 getSpeed();的方法么   答案应该是10 怎么变成了20哎

正在回答

3 回答

<?php

class Car {

    private static $speed = 10;

    

    public function getSpeed() {

        return self::$speed;

    }

    

    //在这里定义一个静态方法,实现速度累加10

    public static function speedUp() {

        return self::$speed+=10;

    }





}


$car = new Car();  //初始化

 $car->getSpeed();//调用一次getSpeed获取到初始化10

Car::speedUp();  //调用静态方法加速根据获取到的10进行增加10=20

Car::speedUp();  //调用静态方法加速,在之前的基础上再增加10=20+10=30

Car::speedUp();  //调用静态方法加速在之前的基础上再增加10=30+10=40

echo $car->getSpeed();  //调用共有方法输出当前的速度值  最终打印出来是40


0 回复 有任何疑惑可以回复我~

个人理解 echo Car::speedUp(); 静态调用结果speed=20 当调用echo $car->getSpeed() 方法里面的 return self::$speed;中的self指向内存中的speed=20,并内有对他进行任何的改变,所以两次都是20,

0 回复 有任何疑惑可以回复我~
#1

慕沐4974640 提问者

个人理解是这样子的
2018-08-07 回复 有任何疑惑可以回复我~

因为$speed是静态的属性,被speedUp调用以后是不会释放值的。所以第一次调用speedUp会在10的基础上加10,这个属性的值本身就被变了。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为啥子也是20

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信