PHP类中的抽象类,抽象方法,abstract
的有关信息介绍如下:PHP类中的抽象类,抽象方法,abstract
就是一个不能实例化(不能new)的类。
定义形式:
abstract class 类名{
//跟之前一样,定义类的成员就行
}
为什么需要这样一个“抽象类”——它不能实例化对象。
请看如下代码:
可见:
抽象类的目的不是为了得到一个自己的对象,而是为了“后代类”服务,给后代类提供一定的属性和方法。
再看一个具体一点的应用场景:
抽象方法,就是一个“啥也不做”的方法:
定义形式:
abstract function 方法名(形参1,形参2,... );
可见:
1,抽象方法,只定义方法头,没有大括号部分的方法体;
2,可以看到,该方法实际上没有任何可执行的代码,自然并不能做任何事情;
3,该方法是“专用于被覆盖(重写)”;——实际上,抽象方法,是要求下级必须重写。
可见:
这种抽象类,抽象方法,其实目的是:设计上级类的人(程序员),要求设计下级类的人(成员),必须是做到哪些事情,但又不规定怎么做。
l1,一个抽象方法,必须放在抽象类中。
l2,但:一个抽象类中,可以没有抽象方法——实际应用中,其实很少见。
l3,下级类必须去“重写”上级类中的抽象方法,并给定具体实现代码(即该方法有方法体);
——但如果下级类本身又是抽象类,就可以不这么做——当然,做(去实现)也可以。
l4,下级类实现上级类的抽象方法的时候,也要遵循如下原则:
na,访问修饰符的范围不能更小;
nb,方法的参数跟上级类定义的保持一致;
n——其实上两条要求是“重写”的要求,而这里,其实本质就是重写。
其代码原理如下:
abstract class A{
public $p1;
abstrct function f1();
}
class B extends A{
function f1(){ ... }
}
abstract class C extends A{
public $p2;
function f2(){ .... }
abstrct function f3();
}
这样,
B必须是实现f1(),
而:
C可以不实现f1(),也可以实现;
如果C没有实现f1()则:
C的后代类也得去实现f1(),还得去实现f3()