类在实例化对象时,该对象中的成员只被当前对象所有。如果希望在类中定义的成员被所有实例共享,此时可以使用类常量或静态成员来实现。
在类中,有些属性的值不能被改变,并且希望被所有的对象所共享。类常量定义需要使用const关键字来声明。
const PI=3.1415926;使用const关键字来声明常量,常量名前不需要添加$符号,并且在声明的同时,必须对其进行初始化工作。
案例
<?php
class mathtool{
const PI=3.1415926; //定义一个类常量
public function show(){
echo mathtool ::PI."<br>"; //通过类名访问
}
public function display(){
echo self :: PI ."<br>";
}
}
echo mathtool::PI."<br>"; //在类外直接访问
$obj=new mathtool();
$obj->show();
$obj->display();
?>
运行结果
需要注意的是,类中定义的常量只能是基本数据类型的值,而且必须是一个定值,不能是变量、类的属性、数学运算的结果或函数调用。类常量一但设置后就不能改变,如果试图在程序中改变它的值,则会出现错误,且在声明类常量时*要赋初始值,因为后期没有其他方式为其赋值
类常量可以实现类的所有对象共享一份数据,在类中使用静态成员也可以达到同样的效果。静态成员被static关键字修饰,它不属于任何对象,只属于类。静态成员包括静态属性和静态方法
1.静态属性
有些时候,我们希望某些特定的数据在内存中只有一份,并且可以被类的所有实例对象所共享。如,在一个学校所有学生共享一个学校名称,此时*不必在每个学生对象所占的内存空间都定义一个字段来存储这个学校名称。可以使用静态属性来表示学校名称让所有对象共享
定义静态属性的语法格式如下
访问修饰符 staticstatic关键字写在访问修饰符后面,访问修饰符可以省略,默认为public
案例
<?php
class student{
public static $SchoolName="*中学";
public function show(){
echo "我的学校是".self::$SchoolName."<br>";
}
}
$stu1=new student();
$stu2=new student();
echo "学生1:";
$stu1->show();
echo"<br>";
echo "学生2:";
$stu1->show();
?>
运行结果
需要注意的是,静态属性是属于类而非对象,所以不能使用“对象->属性”的方式来访问,而应该通过“类名::属性”的方式来访问。如果是在类的内部,还可以使用self关键字代表类名
2.静态方法
有时我们希望在不出创建对象的情况下,就可以调用某个方法,也就是使改方法不必和对象绑在一起。要shix 这样的效果,可以使用静态方法。静态方法在定义时只需在方法名前加上static关键字,其语法格式如下
访问修饰符 static 方法名(){}静态方法的使用规则和静态属性相同,即通过类名称和范围解析操作符(::)来访问静态方法。
案例
<?php
class student{
public static $SchoolName="第二中学";
public static function show(){
echo "我的学校是:".self :: $SchoolName;
}
}
student :: show();
?>
运行结果
注意:在静态方法中,不要使用$this,因为静态方法是属于类的,而$this则是指对象上下文。在静态方法中只对静态属性进行操作
*声明:类的静态成员内容来源于网络收集和整理,版权归原著所有,如来源信息有误或侵犯权益,请联系站长作修改和删除处理。