用“class 类名{}”定义一个类是最常用的方式,“class”关键字前面也可以额外加一些其他关键字做修饰。
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。
通常,一个类,没有特别声明的话,则“别人”就可以随意拿过来使用并对之进行“扩展”——继承。
但是:
如果某个类不希望对其进行扩展,则可以将其声明为“最终类”。
形式:
final class 类名{ 。。。。类定义。。。。}
通常,一个方法,如果没有特别声明,则下级类就可以对其进行“覆盖”(重写)。
但是:
如果某个方法不希望被下级类覆盖,就可以对其生命为“最终方法”。
形式:
final function 方法名(){。。。。方法定义。。。。}
手册里的两个示例:
了解下就好了,如果在项目开发时没有特殊要求,是没有必要做这样限制的。
注意:成员属性变量不能使用“final”修饰,在java对象中是可以使用“final”修饰的,用“final”修饰其实就是定义一个常量,在PHP对象中定义常量还是使用“const”修饰。
在正常定义类的前面,加上关键字:abstract,那就构成抽象类。
abstract class 类名{.....类的定义.....}
抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已。
前面需要加上abstract。
比如:abstract function f1($x1, $y, $m) ;//注意,后面一定有分号。
抽象方法只能存在抽象类里。
手册里的详细描述:
PHP5支持抽象类和抽象方法。抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类。任何一个类, 如果它里面至少有一个方法被声明为抽象的,那么这个类就必须被声明为抽象的。如果类方法被声明为抽象的, 那么其中就不能包括具体的功能实现。
继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法(除非子类也继续作为抽象类);另外,这些方法的可见性必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不能定义为private。
不能直接被实例化:
抽象方法不能存于普通类里:
抽象类有什么用?
抽象类可以用来规范一些类的共同特性,但又不需要去对其进行实例化。
怎么规范:继承它。
也就是说,抽象类的使命是专门做“父类”:子类就继承了它的特性,这就是“规范作用”。
抽象方法有什么用?
其实跟抽象类一样,配合抽象类,来实现对下级类的“行为规范”。
即相当于要求下级类必须去完成该功能(动作),但自己是不做的。
抽象类抽象方法细节关系描述
1,如果一个方法定义为抽象方法,则其所在的类必须定义为抽象类。
2,但,一个抽象类中,可以没有抽象方法——但这样的抽象类意义不大。
3,子类继承自一个抽象类,则子类必须实现父类中的所有抽象方法,除非子类也继续作为抽象类。
4,子类实现抽象父类的方法时,访问控制修饰符的范围不能降低,且方法的参数也须一致——其实这就是重写,所以要满足重写的要求。