类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
定义语法:class Person{
}
对象 − 是类的实例。
创建语法:class Person{
}
$p=new Person();
成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。
调用成员的方法,$p->name();
成员函数 − 定义在类的内部,可用于访问对象的数据。
class Person{
function fn(){};
}
访问控制关键字: public(公有):公有的类成员可以在任何地方被访问。
protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
private(私有):私有的类成员则只能被其定义所在的类访问。
继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
通过关键字extends来继承:
class Child extends Parent{}
父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。
子类 − 一个类继承其他类称为子类,也可称为派生类。
多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
抽象性 − (abstract)抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的
接口 − 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
抽象类和接口的区别
1. 接口使用implements 而抽象类使用extends 实现
2. 接口中只能申明公有的方法 抽象类属性 常量方法都可以申明
3. 接口没有构造函数抽象类有
4. 接口可以实现多个接口但是抽象类只能继承一个
封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
语法:function __construct(){}
析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
用于销毁new实例化的内存,如果不销毁内存,系统性能会大大降低。New实例以后,这个函数也会自动调用,销毁原则是先入后出。
语法:function __destruct(){}
静态成员 − 在成员属性 成员方法 前面加上static关键字。
如何访问:类的内部访问
class Person{
public function fn(){
echo self::$name; //推荐
echo Person::$name;
}
}
$p=new Person;
$p->fn();
类的外部访问
class Person{
public function fn(){
}
}
$p=new Person;
echo Person::$name;
final关键字 − 如果写在类的前面表明这个类不能被继承,如果写在类的方法前面和属性前面说明这个方法和属性也不能被重载。