章节
问答
课签
笔记
评论
占位
占位

PHP类和对象之Static静态关键字

静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用。静态属性不允许对象使用->操作符调用。

class Car {
    private static $speed = 10;
    
    public static function getSpeed() {
        return self::$speed;
    }
}
echo Car::getSpeed();  //调用静态方法

静态方法也可以通过变量来进行动态调用

$func = 'getSpeed';
$className = 'Car';
echo $className::$func();  //动态调用静态方法

静态方法中,$this伪变量不允许使用。可以使用self,parent,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();

任务

我也来试一试:定义一个静态方法,实现速度累加10

在右侧代码编辑器第10-12行输入下面代码:

public static function speedUp() {
    return self::$speed+=10;
}
?不会了怎么办

在注释后输入出下代码:

public static function speedUp() {
    return self::$speed+=10;
}
||
1
2
<?php
class Car {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最赞回答 / 南风丿过境丶
self操作的是当前类的属性和方法,需要用::调用,英语的意思就是自身的。然后parent操作当前的父类。你这里使用的是BigCar的start方法,然后操作从父类继承下来的speedUp方法,只调用了一次speedUp,你使用parent调用的是父类本身的speedUp方法,同样也是使用了一次speedUp,所以两个代码的执行效果一样。

最赞回答 / 爱喝水的双鱼
static:只是指静态的标识符,在调用静态方法或者值时只使用self和parent;如果是在当前类中调用当前的静态值或者方法的话,就使用self;如果是在子类中要调用父类的静态方法则使用parent;

最新回答 / 奥特曼_TIM
<?phpclass Car {    private static $speed = 10;        public function getSpeed() {        return self::$speed;    }        //在这里定义一个静态方法,实现速度累加10    public static function speedUp() {        return self::$speed+=10;    }}$car = new Car();  //初始化 $car-...

已采纳回答 / 有为小青年丶
在类里面访问方法和属性的时候使用$this伪变量来访问,但是如果这个方法,属性是静态的时候就需要使用self来访问了

已采纳回答 / _晴不知所起一往而深_
是的,你说的没错,静态方法可以不用实例化对象!那个$car = new Car();是为echo $car->getSpeed(); 服务的,调用getSpeed()才需要实例化对象~~调用getSpeed();不需要实例化对象注意Car::speedUp();那个Car是类,不是对象~~~~~是首字母大写的~~~改成这样子及容易看多了~~Car::speedUp();  //调用静态方法加速$car = new Car();echo $car->getSpeed();  //调用共有方法输出...

已采纳回答 / qq_OranGe君_0
没写return。class BigCar extends Car {    public static function start() {      return   parent::speedUp();    }}

最赞回答 / 语沫流逝
<...code...>结论:(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";(2)、静态方法不需要实例化即可调用。同上(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;

已采纳回答 / 代码菌
你先调用的speedUp方法呀

最新回答 / Mystery233
speed是私有属性,外部不能直接调用。
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言