访问修饰符
public:公共的,共有的,公开的(可以在“任何位置”使用)
protected:受保护的(可以在当前类或继承关系中使用)
private:私有的(只能在其所在的类中访问)
父类关键词
parent代表父类
父类的使用
parent::__construct($p1);//调用父类的构造函数来初始化p1
继承关键字
class 子类 extends 父类 {}
构造方法析构方法在继承中的表现
子类中没有定义构造方法时,会自动调用父类的构造方法
可以手动调用 parent::__construct($p1)
优点:节约代码
重写关键字:override
例子
class C{
function show1($para1){
echo "<br />父类的show1方法:para1 = " . $para1;
}
}
class D extends C{
function show1($para, $para2){//参数不一致
echo "<br />子类的show1方法";
}
}
重写的基本要求
访问权限
下级的访问控制权限应该不低于上级的访问控制权限:
方法的参数形式
应该跟父类的一致。
最终类关键字final class(最终方法:final method)
用途:不希望对其进行扩展
书写形式:final class 类名{ }
工厂模式
class factory{
//Instance表示“实例”,“对象”
static function getInstance($className){
if(file_exists(‘./class/‘ . $className . ".class.php")){
$obj1 = new $className();
return $obj1;
}
else{
return null;//也可以die();
}
}
}
$obj1 = factory::getInstance("A");//获取类A的一个对象
$obj2 = factory::getInstance("B");//获取类B的一个对象
$obj3 = factory::getInstance("A");//再获取类A的一个对象
优点:只需要指定对象就可以创建
单例模式设计
某个类,只允许其“创建”出一个对象,即使去进行多次创建,也只能得到一个对象。
单例模式的关键点
- 设置私有属性
- 设置私有构造方法
- 设置执行方法
- 设置私有拷贝方法
抽象类
关键字:abstract
作用:用于做父类,规范类,不需要实例化
抽象类方法
抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已
即相当于要求下级类去完成该功能(动作),但自己是不做的
重载方法
在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”
参数不同可以是:数量个数不同,或类型不同,或顺序不同
例子
class A{
int function f1(int x){......}
int function f1(int x, int y){.....}
int function f1(string s int m){....}
}
在PHP中重载只是一个概念
属性重载
所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如果来“应对”的问题。
如果某属性不存在,但在语法中使用如下情形,则会发生:
取值:$v1 = 对象->属性; ===>自动调用类中的__get()方法
赋值:对象->属性 = XX值; ===>自动调用类中的__set()方法
判断是否存在:isset(对象->属性;) ===>自动调用类中的__isset()方法
销毁:unset(对象->属性;) ===>自动调用类中的__unset()方法
方法重载
关键字:__call
例子:
Function f1(){
Echo :”f1被调用”
}
Function f2($x,$y){
Echo :”f2被调用”;
Return $x+$y;
}
Class a{
Public $p1=1;
Function __call($x,$arr){
$c=count($array);
If($c==0){
F1();
}else if(){
Return f2($arr[0],$arr[1]);
}
}
}
$d=new a();
$d->f1();
$v1=$d->f1(1,2)//f1不存在两个参数
echo "<br />d1里面的p1=" . $d1->p1;
echo "<br />结果v1=" . $v1;
执行结果
f1被调用
f1被调用
o1里面的p1=1
结果v1=3