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关键字可以实现多态性的效果。在实际编程中,根据具体需求来选择使用哪个关键字是至关重要的。