1.final关键字:最终版本的类或方法,在类的前面加上final表示该类不能被继承,在方法前面加上final表示该方法不能在子类中重写。
<?php
/**
1.类不能被继承
*/
final class a{
//类中的代码
}
class b extends a{
//继承的类的代码
}
<?php
/**
2.方法不能被重写
*/
class a{
final function run(){
//方法代码
}
}
class b extends a{
function run(){
//方法重写的代码
}
}
2.static关键字:使用static关键字可以将类中的成员标识为静态的,既可以用来标识成员属性,也可以用来标识成员方法。而static成员作为整个类的属性存在,则不管通过类创建多少个对象(甚至可以是没有对象),这个static成员总是唯一存在的,在多个对象之间共享的。因为使用 static 标识的成员是属于类的,所以与对象实例和其他的类无关。类的静态属性非常类似于函数的全局变量。类中的静态成员是不需要对象而使用类名来直接访问的,在类中声明的成员方法中,也可以使用关键字“self”来访问其他静态成员,因为静态成员是属于类的,而不属于任何对象,所以不能用$this来引用它,在PHP中给我们提供了self关键字,就是在类的成员方法中用来代表本类的关键字。
self::staticAttrbuteName; //静态成员属性名 self::staticPropertyName(); //静态成员方法名
如果在类的外部访问类中的静态成员,可以使用对象引用和使用类名访问,但通常选择使用类名来访问。如果在类内部的成员方法中访问其他的静态成员,通常使用self的形式去访问,最好不要直接使用类名称。
示例:统计一个类创建对象的个数
<?php class myClass{ static $count; function __construct(){ self::$count ++; } static function getCount(){ return self::$count; } } //初始化静态成员属性 myClass::$count = 0; //创建多个对象 $obj1 = new myClass; $obj2 = new myClass; $obj3 = new myClass; //访问方式一:类名访问静态成员属性 echo myClass::$count; // 输出:3 echo "<br>"; //访问方式二:类名访问静态成员方法 echo myClass::getCount(); // 输出:3 echo "<br>"; //访问方式三:对象引用访问 echo $obj2->getCount(); // 输出:3