一、面向对象的概念
1.1 什么是面向对象(object oriented)
-
世间万物皆对象,抽象的也是对象,一切可见或不可见都是对象,面向对象是一种以对象为基础的编程思想(自下而上)
-
面向过程是一种以过程为中心的编程思想:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现(自上而下)
1.2 对象的基本组成
- 对象的组成元素:是对象的数据模型,用于描述对象的数据,又称为对象的属性,或者对象的成员变量.
- 对象的行为: 是对象的行为模型,用于描述对象能够做什么事情,又被称为对象的成员方法.
1.3 对象特点
- 每一个对象都是独一无二的
- 对象是一个特定的事物,他的职能是完成特定功能
- 对象是可以重复使用
1.4 面向对象简介
- 面向对象编程就是编程的时候数据结构(数据组织方式 )都通过对象的结构进行存储,使用属性和方法组织起来
1.5 面向对象的实质
-面向对象就是把生活中要解决的问题都用对象的方式进行存储--把所有的数据用属性、方法表现出来。对象之间的互动是通过方法的调用完成互动
#二、面向对象的基本实践
2.1 类的概念
- 物以类聚,把具有相似特性的对象对垒到一个类中,类定义了这些相似对象拥有的相同的属性和方法
- 类是相似对象的描述,成为类的定义,是该类对象的蓝图或者原型
- 类的对象称为一个类的实例(
Instance
) - 类的属性和方法统称为类成员
2.2 类的实例化
- 类的实例化:通过类定义创建一个类的对象
- 类的定义属性值都是空或默认值,而对象的属性都有具体的值
2.3 类的定义
- 类的定义以关键字
class
开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写,以中括号开始和结束 - 类的实例化为对象时使用关键字
new
,new
之后紧跟类的名称和一对圆括号 - 对象中得成员属性和方法可以通过->符号来访问
三、面向对象的高级实战
3.1 对象的继承
父类:拥有部分相同的属性和方法
继承的好处:
- 父类里面定义的类成员可以不用在子类中重复定义,节约了编程的时间和代价;
- 同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用他们的时候可以一视同仁;
- 子类可以修改和调用父类定义的类成员我们称为重写(
Overwrite
), 一旦子类修改了,就按照子类修改之后的功能执行;
子类
:
- 子类可以通过
$this
访问父类的属性 - 子类的对象可以直接调用父类的方法和属性
PHP
的单继承特性:类不允许同时继承多个父类(extends后面只能跟一个父类名称)
3.2 访问控制
面向对象的三种访问权限:
public
是公有的类成员,可以在任何地方被访问,可以被类以及子类或者对象都可以访问;protected
受保护的类成员,可以被其自身以及继承的子类访问,可以被子类继承,但是不能被对象访问,只能通过封装的方式让对象访问;private
私有的类成员,只能被自身访问.不能被子类继承,也不能被对象访问,只能在自身通过封装让外界访问(例如在类里面定义一个公开方法来调用私有属性);
3.3 Static(静态)关键字
静态成员:定义时在访问控制关键字后添加static关键字即可(访问控制关键字:public. protected. private)
- 静态属性用于保存类的公有数据,可以在不同对象间共享
- 静态方法里面只能访问静态属性
- 静态成员不需要实例化对象就可以访问
- 类的内部可以通过
self::
或static::
关键字访问自身静态成员,self::$属性 self::方法()
- 通过
parent::
关键字访问父类的静态成员,也可以通过子类::父类静态成员 - 通过
类名::
的方式在类的外部访问静态成员
3.4 重写和Final关键字
- 子类中编写跟父类完全一致的方法可以完成对父类方法的重写,方法参数最好有默认参数
- 对于不想被任何类继承的类可以在
class
之前添加final
关键字 - 对于不想被子类重写(
overwrite
, 修改)的方法,可以在方法定义前面添加final
关键字
3.5 数据访问
parent
关键字可以可用于调用父类中被子类重写了的方法self
关键字可以用于访问类自身的成员方法,静态成员和类常量;不能用于访问类自身的属性!!!使用常量的时候不需要在常量const
名称前面添加$
符号static::
关键字用于访问类自身定义的静态成员,访问静态属性时需要在属性前面添加$
符号。- 常量属性
const
不能使用对象访问,仅能使用类访问,在类本体内可以使用“self::常量名”
,在类本体外可以使用“类名::常量名”