类在实例化后,对象中的成员只被当前对象所有。如果希望在类中定义的成员被所有对象共享,此时可以使用类常量或静态成员来实现。
类常量
在PHP中,类内除了可以定义成员属性、成员方法外,还可以定义类常量,定义后值不变,可以被所有对象所共有。在类内使用const关键字可以定义类常量,其语法格式如下:
const 类常量名 = '常量值';
类常量的命名规则与普通常量一致,在开发中通常以大写字母表示类常量名。
访问方式:
类名::常量名称
其中::称为范围解析操作符,简称双冒号。
示例:
class Student
{
const SCHOOL = '中山大学'; //定义常量
}
echo Student::SCHOOL; //访问类常量
类常量也可以在类内进行访问,在类内访问时,可以用self关键字代替类名,如 “self::SCHOOL”,免除在修改类名时还要修改类中代码的麻烦。
在开发中,类常量的使用不仅可以在语法上限制数据不被改变,还可以简化说明数据,方便开发人员的阅读与数据的维护。
静态成员
除了类常量外,若想要类中的某些成员只保存一份,并且可以被所有实例的对象所共享时,就可以使用静态成员。在PHP中,静态成员使用static关键字修饰,它是属于类的成员,可以通过类名直接访问,不需要实例化对象。
//静态成员的声明
public static 属性名; //声明静态属性
public static 方法名(){} //声明静态方法
//静态成员的访问
类名::静态成员
需要注意的是,静态成员是属于类的,不需要通过对象调用,所有 $this在静态方法中不可使用,当访问类中的成员时,需要使用范围解析操作符"::"。
示例:
<?php
class Student
{
public static $msg;
public static function show()
{
echo '信息:' . self::$msg; // 类内访问静态属性
}
public static function test()
{
self::show(); // 类内调用静态方法
}
}
Student::$msg = 'PHP的发展前景'; // 类外访问静态属性
Student::show(); // 类外调用静态方法
可见,类的静态成员在没有实例化对象的情况下就可以使用。通常在类外使用类名访问,在类内使用self关键字进行访问。
总结
1、类中定义的类常量和静态成员可以被所有对象共享。
2、在本类内调用静态成员时使用self关键字进行调用,免除在修改类名时还要修改类中代码的麻烦
3、由于静态成员是属于类的,不需要通过对象调用,所有$this在静态方法中不可用。