c语言编程笔录

首页 >   > 笔记大全

笔记大全

PHP Class self与static有什么区别?都怎样用?

更新时间:2024-01-13

前言

在PHP中,self和static都是关键字,用于访问类的属性和方法。它们在某些情况下有相似的用法,但又有一些区别。了解这些区别对于正确使用它们非常重要。本文将详细介绍self和static的区别,以及它们的用法和规范。

self关键字

self关键字用于访问当前类的静态成员。当你需要在类的方法中访问该类的静态属性或调用静态方法时,可以使用self关键字。

class MyClass {
    public static $myProperty = "Hello, world!";

    public static function myMethod() {
        echo self::$myProperty;
    }
}

echo MyClass::$myProperty;  // 输出:"Hello, world!"
MyClass::myMethod();        // 输出:"Hello, world!"

上述代码中,我们定义了一个叫做MyClass的类,该类有一个静态属性$myProperty和一个静态方法myMethod。在myMethod方法中,我们使用self关键字来访问静态属性$myProperty。在类外部,我们可以直接使用类名来访问静态属性和调用静态方法。

static关键字

static关键字与self类似,用于访问类的静态成员。然而,static还可以用于在子类中覆盖父类的属性和方法。

class ParentClass {
    public static $myProperty = "Hello, world!";

    public static function myMethod() {
        echo static::$myProperty;
    }
}

class ChildClass extends ParentClass {
    public static $myProperty = "Hello, PHP!";
}

echo ParentClass::$myProperty;    // 输出:"Hello, world!"
ParentClass::myMethod();          // 输出:"Hello, world!"

echo ChildClass::$myProperty;     // 输出:"Hello, PHP!"
ChildClass::myMethod();           // 输出:"Hello, PHP!"

上述代码中,我们定义了一个叫做ParentClass的父类和一个叫做ChildClass的子类。两个类都有一个名为$myProperty的静态属性和一个名为myMethod的静态方法。在myMethod方法中,我们使用static关键字来访问静态属性$myProperty。在子类ChildClass中,我们覆盖了父类的$myProperty属性,并根据需要修改了它的值。无论是在父类还是子类中,我们都可以直接使用类名来访问静态属性和调用静态方法。

总结

self关键字用于访问当前类的静态成员,而static关键字则可以用于覆盖父类的静态属性和方法。使用self关键字可以确保固定访问当前类的静态成员,而使用static关键字可以实现多态性的效果。在实际编程中,根据具体需求来选择使用哪个关键字是至关重要的。