1、面向对象--继承 extends
子类拥有父类定义的类成员
子类可以修改或调整父类定义的类成员
在子类中,父类的属性也可以通过$this访问
extends后面只能跟一个类名,这就是php的单继承原则,这就是php的单继承原则
2、面向对象--访问控制
public公有的类成员,所有类可以访问
protected受保护的类成员,自身和子类可以访问
private 私有类,类成员只能在类内部访问
3、面向对象-静态成员
1)静态属性定义时在访问控制关键字后面添加static关键字即可
2)静态属性用于保存类的公有数据
3)静态方法里面只能访问静态属性
4)静态成员不需要实例化对象就可以访问
5)类的内部可以通过seft::或者static::关键字访问自身静态成员
6)可以通过parent::关键字访问父类静态成员
7)可以通过类的名称::在类定义外部访问静态成员
4、面向对象--final成员
子类中编写跟父类方法名完全一致的方法可以完成对父类方法的重写overwrite
不想让子类修改方法,在方法添加final关键字
final public function
不想让子类继承类,在类添加final关键字到final class
5、数据访问
1)用parent关键字可以访问父类被子类重写的方法
2)self::可以访问类自身成员方法,也可以用于访问自身静态成员和类常量;不饿能访问类自身的属性;使用常量的时候不需要在常量名称前面添加$符号
3)static关键字用于访问类自身定义的静态成员,访问静态属性时需要在属性前面添加$符号
6、面向对象--接口
1)interface关键字用于定义接口,里面的方法只需定义,不需要具体实现。
interface ICanEat{
}
2)implements 关键字用于便是类实现某个接口
3)实现了某个接口之后,必须提供接口中定义的方法的具体实现
4)不能实例化接口
5)可以用instanceof关键字来判断某个对象是否实现了某个接口,实现了就可以用对象调用方法
6)可以用extends让接口继承接口,当类实现子接口时,父接口定义的方法也需要在这个类里面具体实现
7、面向对象--多态
相同的一行代码,对于传入不同的接口的实现的对象的时候,表现是不同的,这就是多态;这个很重要
function checkEat($obj){
if($obj instanceof ICanEat){
$obj->eat('foo');
}
}
8、面向对象--抽象类
接口里面的方法是没有实现的,而类里面的方法都是有实现的,那么抽象类就是可以包含没有实现的方法,又有实现的方法。
//abstract关键字用于定义抽象类
abstract class ACanEat{
//
abstract public function eat($food);//没有实现
public function breath(){//已实现
echo 'breath';
}
}
//继承抽象类的关键字是extends
class Human extends ACanEat{
//继承抽象类的子类需要实现抽象类中定义的抽象方法
public function eat($food){
//实现
}
}
Human可以用breath和eat方法
抽象类abstract: 介于类和接口之间;抽象类中有部分抽象方法
抽象类
抽象类中可以包含普通方法
继承抽象类的子类需要实现抽象类中定义的抽象方法
实现抽象类 abstract class 类名
抽象类介于接口与类之间,公用不用子类实现的方法可以直接写方法,要求继承必须实现的可以设为 abstract 抽象方法,只声明方法名和参数名;
继承抽象类使用 extends;
抽象类的介绍和说明
面向对象高级实践
继承
访问控制
static(静态)关键字
重写
Final关键字
数据访问补充
接口
多态
抽象类
类中的所有方法都必须被实现,接口中所有方法都不能实现,抽象类是介于类和接口之间,方法可以实现也可以不实现
abstract 关键字定义类,即为抽象类。
抽象类中使用abstract定义声明一个方法,即为抽象方法,不需要具体实现。但在子类中需要实现。若方法没有abstract定义,则需要具体实现。
https://wenku.baidu.com/view/8acb6fa0b0717fd5360cdc32.html
个人认为:继承也好、接口也好、抽象类也好等等都是为了提高代码的重用性,减少代码冗余;找到对象的公共特点,让这些公共特点单独封装,供对象调用;
个人认为:继承也好、接口也好、抽象类也好等等都是为了提高代码的重用性,减少代码冗余;找到对象的公共特点,让这些公共特点单独封装,供对象调用;
4.继承抽象类的关键字是extends;
5.继承抽象类的子类需要具体实现抽象类中定义的抽象方法;
抽象类介于接口和类之间;接口中的方法是不用实现,类中的方法是必须实现,而抽象类中的方法有一部分方法有实现,有一部分方法没现实;
1.abstract关键字用于定义抽象类;举例:abstrace class aCanEat{...}
2.在抽象方法前面添加abstract关键字的方法,可以标明这个方法是抽象方法不需要具体的实现;举例:{abstract function eat($food)}
3.抽象类中可以包含普通的方法(即有具体实现的方法);