我们知道,如果一个类没有实例化对象,我们是不能调用其实例方法的。不过,我们可以通过static关键字声明静态方法,这些方法属于类本身,不需要实例化就能访问。

1. 什么是静态方法?

静态方法是使用static关键字声明的方法,它属于类本身而不是类的任何实例。静态方法可以直接通过类名调用,无需创建对象实例。

2. 如何定义静态方法?

在类中使用static关键字声明:

<?php 
class Dotcpp_user
{
    // 静态方法
    static public function f()
    {
        echo "dotcpp_user";
    }
}
?>

3. 如何调用静态方法?

使用以下语法调用静态方法:

<?php 
class Dotcpp_user
{
    // 静态方法
    static public function f()
    {
        echo "dotcpp_user";
    }
}
/* 类名::方法名() */
Dotcpp_user::f();  // 输出: dotcpp_user
?>

4. 在静态方法中访问静态属性

在静态方法中,可以使用self::关键字访问静态属性:

<?php 
class Dotcpp_user
{
    static public $nickName = 'dotcpp_user';
    
    // 静态方法
    static public function f()
    {
        // 使用 self:: 访问静态属性
        echo self::$nickName;
    }
}
Dotcpp_user::f();  // 输出: dotcpp_user
?>

5. 继承中的静态方法

在继承关系中,子类继承的静态方法也遵循访问权限规则:

<?php 
//1. 父类
class Base
{
    static public function f1() {
        return "dotcpp";
    }
    
    static protected function f2() {
        return "dotcpp";
    }
}
//2. 子类继承父类
class Son extends Base {
    // 添加公共方法来访问protected方法
    public static function callF2() {
        return self::f2();   // 在子类内部可以访问父类的protected方法
    }
}
// 访问public方法
echo Son::f1();         // 输出:dotcpp
// 通过公共方法访问protected方法
echo Son::callF2();     // 输出:dotcpp
//重要注意事项
//静态方法中不能使用$this关键字
//静态方法只能访问静态属性和其他静态方法
//静态方法不能直接访问实例属性或实例方法
?>

总结:通过static关键字在类内声明静态方法,这些方法属于类本身,我们可以在不创建类实例的情况下直接调用。静态方法常用于工具类、工厂模式等不需要对象状态的场景。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)