PHP面向对象编程 对象的基本概念 PHP面向对象的基本实践 PHP面向对象的高级实践 PHP面向对象的特殊实践
再次梳理一下面向对象编程的要点。
此文是以php为例,但思想是通用的。
总结的PHP面向对象编程笔记
对象的基本概念
对象的基本构成
对象包含两部分
一、对象的组成元素
是对象的数据模型,用于描述对象的数据。
又被称为对象的属性,或对象的成员变量。
二、对象的行为
是对象的行为模型,用于描述对象能够做什么。
又被称为对象的方法。
对象的特点
1 每个对象都是独一无二的
2 对象是一个特定事物,他的职能是完成特定功能
3 对象是可以重复利用的
面向对象的基本概念
面向对象就是在编程的时候数据结构形式都通过对象的结构(属性,方法)进行存储。
面向对象的实质
面向对象就是把生活中要解决的问题都通过对象的方式(属性,方法)进行存储。
对象和对象之间的互动是通过方法的调用(方法)完成互动。
面对对象的原则
对象内部是高内聚的
对象对外是低耦合的
PHP面向对象的基本实践
类
通过关键词 class
物以类聚,把具有相同特性的对象归到一个类中。
类定义了这些对象有相同的属性,方法。
类的对象称为类的一个实例(instance)
类的属性方法统称为类的成员。
类的实例化
类的实例化就是通过类定义创建类的一个对象。
通过关键词 new
构造函数
__construct()
构造函数,在对象被实例化时自动调用,都会自动执行一次
析构函数
__destruct()
在程序结束的时候,自动调用
析构函数通常用来清理程序使用的资源
对象的引用
面向对象的高级实践
继承
继承的好处
1 父类定义的类成员不用在子类中重复定义,节约了编程的时间
2 .同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用他们的时候可以一视同仁
3 子类可以调整或重写父类的类成员。
在子类的对象上可以直接访问父类中的方法和属性
父类中的属性,可以通过$this来访问
在PHP中可以用extends关键字来表示类的继承,后面跟父类的类名。
PHP中extends后面只能跟一个累的类名,这就是php的单继承原则
访问控制
public (公有的):类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)这个类成员(包括成员属性和成员方法)。如果类的成员没有指定成员访问修饰符,将被视为 public 。
protected (受保护的):被定义为 protected 的成员不能被该类的外部代码访问,但该类的子类具有访问权限。
private (私有的):被定义为 private 的成员,允许同一个类里的所有成员访问,但对于该类的外部代码和子类都不允许访问。
static(静态)关键字
静态属性定义时在访问控制关键字后面添加static关键字即可
静态方法定义同上
在类定义中使用静态成员的时候,在self关键字后面跟着::操作符,即可。注意,在访问静态成员的时候,::后面需要跟$符号
在类定义外部访问静态属性,我们可以用类名加::操作符的方法来访问类的静态成员。
使用parent关键字就能访问父类的静态成员
1.静态属性用于保存类的公有数据
2.静态方法里面只能访问静态属性
3.静态成员不需要实例化对象就能访问
4.内部可以通过self或者static关键字访问自身静态成员
5.可以通过parent关键字访问父类的静态成员
6.可以通过类的名称在类定义外部访问静态成员
Final关键字(PHP5)
final -- 用于类、方法前。(是最终的效果)
final类 -- 不可被继承。
final方法 -- 不可被覆盖。
数据访问
1.parent关键字可以调用父类中被子类重写了的方法
2 self关键字可以用于访问类自身的成员方法,也可以用于访问自身的静态成员和类常量;不能用于访问类自身的属性;使用常量的时候不需要在常量名称前面添加$符号
3.static关键字用于访问类自身定义的静态成员,防伪静态属性时需要在属性面前添加$符号
对象接口
接口是一种标准,简单说,比如有个说话的函数/方法,有些人用say(),有些人用shuo(),有些人用其他的,这可不行,这时候定义一个接口,所有人都得用同一个写法。
接口:
1.方法不具体实现
2.定义接口为interface关键字
3.类使用接口为implements 关键字
4.接口可以继承接口,用extends关键字
5.接口不能被实例化
可以用instanceof 判断某个对象是否实现了某个接口
类的方法必须有具体实现,接口的方法必须为空。
多态
因为接口的实现方法可以有很多,所以对接口里面定义的方法的具体实现也是多种多样,这就是多态。
抽象类
抽象类是介于类和接口之间的一种形态,有一部分类是没有实现的,有一部分类是已经实现的
abstract关键字定义抽象类
在抽象方法添加abstract关键字可以表明这个方法是抽象方法,不需要具体实现
抽象类中可以包含普通的方法
继承抽象类用extends关键字
继承抽象类的子类需要实现抽象类中的抽象方法
PHP面向对象的特殊实践
只有php有
魔术方法
__tostring 当对象被当做字符串使用时自动调用
__invoke 当对象被当做方法是使用时自动调用