PHP 面向对象 知识点梳理 二

面向过程和面向对象的区别

  • 面向过程是以过程(步骤)为中心的编程思想。
  • 面向对象是以事物(对象)为中心的编程思想。
  • 面向过程着重于做什么,面向对象着重于谁来做。
  • 面向对象适合大项目开发,主要特点:分工合作。

类和对象的关系

  • 类就是分类、类别、归类、理论、无形的。
  • 对象是一个一个实体,对象来自于类,类可以产生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修饰的方法就是抽象方法。
  • 抽象类:该类直接被继承,不能实例化。一般基础类,都是抽象类。
  • 抽象方法:该方法必须要重写,不能继承就完了。
  • 抽象方法就是方法的命名规范,也是一种监督的机制。
  • 抽象方法没有体,也就是没有大括号。
  • 只要有一个方法为抽象方法,该类必须声明为抽象类。
  • 抽象方法必须是成员方法。
  • 抽象类中可以包含其它元素(成员属性、成员方法、常量、静态属性、静态方法)。
  • 抽象类也可以没有抽象方法。
  • 抽象方法必须全部都要重写,重写要符合重写规则。
    栗子:
    这里写图片描述
posted @ 2018-09-16 01:41  liulonglong  阅读(122)  评论(0编辑  收藏  举报