面向过程和面向对象的区别
- 面向过程是以过程(步骤)为中心的编程思想。
- 面向对象是以事物(对象)为中心的编程思想。
- 面向过程着重于做什么,面向对象着重于谁来做。
- 面向对象适合大项目开发,主要特点:分工合作。
类和对象的关系
- 类就是分类、类别、归类、理论、无形的。
- 对象是一个一个实体,对象来自于类,类可以产生N多个对象。
- 在电脑中,先有类,才有对象。没有类,一定没有对象。
成员属性和成员方法
- 成员的东西,就是对象的东西。
- 对象只有两个东西:成员属性、成员方法。
- 通过”->”来访问对象的属性和方法。
- 每个对象都会占用内存空间的,而类占用的内存空间很少。每个在内存中地址不一样。
静态属性和静态方法、类常量
- 类的东西,就是静态的东西。
- 静态属性和静态方法是类的东西,只能通过类名来调用,不能通过对象调用。如:Student::$name
- 静态属性和静态方法,在内存中只有一份,不会随着对象的增加而增加。
- 例如:可以用静态属性来存储在线人数
- 常量一旦定义不能修改。静态属性是可以修改。
构造方法
- 当使用new关键字创建一个类的对象时,第1个自动调用的方法,就是构造方法。
- 构造方法的作用:对象初始化。
- PHP中函数或方法不能重名,换句话说:PHP中的函数或方法,不支持重载。
- 构造方法的名称是固定的:void function __construct(形参){ ……}
- 构造方法没有返回值,不能使用return语句。
构造方法必须是成员方法,不能是静态方法。
析构方法
OOP中内存分配情况
类的封装性
类的继承性
类的多态性
最终类和最终方法
抽象类和抽象方法
析构方法
1、什么是析构方法?
- 当对象销毁前,自动调用的方法,就是析构方法。
- 对象销毁的方式有哪些?unset()、网页执行完毕。
- 析构方法的名称是固定的:void function __destruct(void)
- 析构方法没有返回值,也没有参数。
- 析构方法的作用:做一些服务器垃圾回收,节省系统资源(开销),连开数据库连接、删除某些变量等。如:数据库数据返回后,手动关闭数据库连接。
2、语法格式
3、对象什么时候销毁
(1)网页执行完毕,析构方法自动调用,对象也会销毁
(2)手动删除对象变量,析构方法自动调用,对象也会销毁
4、实例:统计在线人数
OOP中内存的分配情况
1oop中内存的分配情况
2、值传递
JS6中数据类型
基本数据类型
Undefined Null Boolean Number String
复杂数据类型
Object
值传递的数据类型:字符串,数值型,布尔值,undefined 、null
引用传递的数据类型:数组 对象 函数
PHP中有8中数据类型
值传递的类型:字符串,整型,浮点型,布尔型,数组,null
引用出传递的数据类型:对象、资源
值传递:将一个变量的值,复制一份,传给另一个变量,这两个变量之间没有任何关系,修改其中一个变量的值,另一个变量的值不会变。
3、引用传递
引用传递:将一个变量的地址,复制一份,传给另一个变量。这两个变量之间有联系的。修改其中一个变量的值,则另一个变量也会跟着变。
对象和资源在内存中如何存储呢?将对象变量名和对象的数据地址存在”栈内存”,而将对象的”真实数据”存在”堆内存”中。
对象数据在内存中表示
4、其它类型变成引用传递
在PHP中,其它的数据类型也可以变成引用传地址,只需要在引用的变量前加”&”符号即可。
(一)类的封装性
类的封装性:将敏感的数据保护起来,不受外界访问。
类的封装性,主要通过权限控制符来实现。
提示:一般情况下,类中的成员属性都是private、protected权限,然后通过public方法给其赋值。
2、访问权限修饰符介绍
Public(公共权限):在任何地方都可以访问,主要是类外、类内、子类中都可以访问。
Protected(受保护的权限):只能在类内、子类中被访问,在类外不能访问。
Private(私有的权限):只能在本类中被访问,在类外和子类中无限访问。
(二) 类的继承性
CSS中也有继承,父标记的样式可以被子标记来使用。把所有子标记中的公共的样式,提取出来放到中,其它标记再来继承标记。
如果一个B类,拥有了A类的所有内容,则我们就说B类继承了A类。
A类可以称为:基础类、父类、上层类等。
B类可以称为:派生类、子类、下层类等。
为什么要继承?主要为了实现项目功能的升级和扩展。项目需要升级和扩展,需要增加很多新功能,或者完善一些功能。但不建议直接修改原始类(原始类太复杂)。创建一个子类,并继承原始类。
项目功能升级:原来就有的功能,现在对它进行完善。
项目功能扩展:原来没有的功能,现在增加一个新功能。
2、继承的语法格式
3、单继承和多继承
单继承:子类只能从一个父类来继承功能。大部分编程语言都是单继承,如:PHP、Java、 C#等。
多继承:子类可以同时从多个父类来继承功能。如:C++是多继承。
多继承:子类可以同时从多个父类来继承功能。如:C++是多继承。
5、构造方法和析构方法的继承
继承:将父类所有的东西全部拿过来,一个不剩的。因此,构造方法和析构方法都可以继承。
6、parent关键字
self用来代表当前类,parent用来代表父类;
parent用来调用父类的内容,包括:类常量、静态属性、静态方法、成员方法;
self和parent都是通过”::”来调用类的东西。”::”又称为静态调用方式。
(三)类的多态
1、什么是类的多态
- 类的多态,就是类的多种形态。
- 类的多态,主要指方法重写和方法重载。但PHP不支持方法重载。
- 方法重载:在一个类中定义两个同名的方法,一定会报错误的。
- 方法重写:在子类中定义一个与父类同名的方法,两个同名方法分布在不同类中。
- 为什么要重写父类的方法?主要是为了实现功能升级。具体是:先将父类中所有内容继承过不,然后再定义一个与父类同名的方法,来实现功能的完善。
2、方法重写的要求
- 子类重写方法的名称,要与父类中方法同名。
- 子类中重写方法的参数个数,要与父类中方法的参数个数一致。
- 子类中重写方法的类型,要与父类中方法的类型一致。要是成员方法都必须是成员方法,要是静态方法都必须是静态方法。
- 子类中重写方法的权限,要不低于父类方法的权限。
- 如果父类的方法权限为public,子类重写方法的权限为public。
- 如果父类的方法权限为protected,子类重写方法的权限为protected、public。
- 如果父类的方法权限为private,子类无法继承,也无法重写。
3、举例说明
4、构造方法重写
构造方法也可以重写,构造方法重写,不要求参数个数必须对等,换句话说:两个构造方法的参数个数可以不一样。但是,普通方法重写,参数个数必须对等。
————————————————————————————————————————————————————————————
最终类和最终方法
- final修饰的类,就是最终类;
- final修饰的方法,就是最终方法;
- 最终类:该类不能被继承,只能实例化。
- 最终方法:该方法不能重写,只能继承使用。
- 例如,数据库类,就是最终类,不需要子类。
栗子 :
抽象类和抽象方法
- abstract修饰的类就是抽象类。
- abstract修饰的方法就是抽象方法。
- 抽象类:该类直接被继承,不能实例化。一般基础类,都是抽象类。
- 抽象方法:该方法必须要重写,不能继承就完了。
- 抽象方法就是方法的命名规范,也是一种监督的机制。
- 抽象方法没有体,也就是没有大括号。
- 只要有一个方法为抽象方法,该类必须声明为抽象类。
- 抽象方法必须是成员方法。
- 抽象类中可以包含其它元素(成员属性、成员方法、常量、静态属性、静态方法)。
- 抽象类也可以没有抽象方法。
- 抽象方法必须全部都要重写,重写要符合重写规则。
栗子: