面向对象

什么是面向对象

面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

面向过程:
以事件为中心的编程思想
分析出解决问题的步骤
函数(最小单位)一步步实现
使用的时候一个个以此调用就可以了
面向对象

1.以功能来划分问题,而不是步骤
2.注重的是对象和对象的使用
3.只有面向对象的程序,才真正的符合人类的思维逻辑

面向对象的好处

1.可读性
2.可重用性
3.扩展性
4.稳定性
5.维护性
6.可测试性

构造方法
是对象创建完成以后,第一自动调用的方法
是给对象中的成员赋初始值用的
__construct
析构方法
对象释放前自动调用的方法
析构方法没有参数
__destruct
面向对象的三大特性:封装、继承、多态

封装:封装是把对象中的成员属性和成员方法,加上访问修饰符,使其尽可能隐藏对象的内部细节,以达到对成员的访问控制。(访问的控制,而不是拒绝访问)

PHP中的三种访问修饰符
public(公有的,默认)
private(私有的)
protected(受保护的)

魔术方法

__set()代替通用的set赋值方法,在直接设置私有属性时调用(两个参数)
__get()代替通用的get赋值方法,在直接访问私有成员属性的时候自动调用(一个参数)
__isset() 判断一个私有属性是否存在时,自动调用__isset方法(参数是属性名称)
__unset() 删除一个私有属性时,自动调用__unset()方法 (参数是属性名称)

1、这四个魔术方法只对类中的私有后者是受保护的成员属性有效。
2、魔术方法前的修饰符可以是公有的私有的不影响调用 。
继承:

1.把两个类或者多个类中的相同的部分可以提出来
2.对于php来说是单继承的
只能继承一个父类,但是一个父类可以有多个子类

继承中的重写(覆盖):

在子类中可以写和父类同名的方法
在子类中定义的与父类同名的属性是对父类属性的重新(覆盖)
在子类中定义的与父类中同名的方法是对父类方法的重写(覆盖)

在子类中访问父类中被覆盖的方法

类名::成员
parent::成员

只要是子类的构造方法,去覆盖父类的构造方法,一定要在子类构造方法的最上边调用一下父类被覆盖的构造方法。

重写(覆盖)的时候权限问题:

子类只能大于或者等于父类的权限,不能变小。
私有的不能覆盖,而是完全当作自己全新的。

重载(php里面没有重载,java里面有重载)

java里的重载 方法相同,参数类型不同或者参数个数不同的方法
instanceof 操作符 用于判断当前的对象是否属于某一个类的类型

final 只可以修饰类和方法(不是修饰属性)

final 修饰的类不能扩展,不能有子类,这个类是最终的类
修饰方法 public final function sat(){}
final修饰的方法,不能在子类中被重写,那么这个方法就是最终的方法

static 修饰属性和方法,不能修饰类

1.static 修饰的成员属性,存在于内存的初始化静态段
2.可以被所有同一个类的多个对象共用
3.类在第一次出现的时候,就把该类的静态成员加载到了内存中
4.self::指的是本类
5.静态成员一旦被加载,只有脚本结束才释放
6.在静态方法中,不能访问非静态成员

const 修饰的成员属性为常量,const只能修饰成员属性(相当于这个属性是一个常量属性)

定义常量需要注意的几点:

1.常量建议使用大写,不使用$
2.常量一定要在声明的时候就给好了初值
3.常量只能读,不能修改

常量的访问方式

1.在类的外部 类::常量名
2.在类的内部 self::常量名

单态(单例,单件)设计模式

java里有23种设计模式,比如有单例模式,工厂模式,MVC模式等。
单态模式的主要作用就是保证在面向对象程序设计中,一个类只能有一个实例对象存在。

魔术方法(只有php里面才有魔术方法)

1.魔术方法都以‘__’开头
2.自动调用不同的魔术方法有不同的调用时机
3.魔术方法的方法名都是固定的
4.如果没有写,那么魔术方法就不存在,也就不会有 自动调用的功能了

__toString()

1.我们在使用echo,print,printf输出一个对象引用时,(或者可以说输出一个对象地址)自动调用这个方法
2.我们可以把对象的基本信息放到__toString内部,形式字符串返回
3.__toString方法中,不能有参数,必须有返回值,返回值必须是字符串类型的

__clone()

1.我们可以使用clone关键字复制一个对象
2.在使用clone关键字复制对象的时候,自动调用的方法
3.作用:对新克隆的对象进行初始化
4.在这个魔术方法总中的$this代表的是克隆之后的对象,也就是说代表的副本

__call()

1.在调用对象中不存在的方法时,自动调用的方法
2.需要有两个参数:
第一个参数是:调用的那个不存在的方法的方法名
第二个参数是:调用的那个不存在的方法的参数
3.作用:如果方法不存在,咱们可以写提示信息
主要的作用:可以将那些功能相似但是方法名不同的方法,采用这种方法来表示

抽象方法?

定义:一个方法如果没有方法体,那么这个方法就是抽象方法
1.声明一个方法,不使用{}直接用;结束
2.抽象方法必须使用关键字来修饰方法 abstract

抽象类?

1.如果一个类中有抽象方法,那么这个类就是抽象类
2.如果是抽象类,必须使用abstract关键字来修饰这个类

抽象类和普通的类有什么区别?

1.抽象类是一种特殊的类,抽象类里面有抽象方法
2.抽象类不能实例化对象, 抽象类不能创建出对象

抽象类的作用:

抽象类是用来要求子类结构的,抽象类是一个规范。

抽象方法的作用:

抽象方法就是规定了子类必须有这个方法的规范,但是没有具体的实现。所以他交给子类来实现(重写)具体的功能(方法)

1、注意:子类必须全部重写(覆盖)抽象方法 如果子类只部分重写抽象类的方法,那么说明子类里面还有抽象方法,也就是说这个子类也必须是抽象方法。

面向对象中的接口
抽象类是一种特殊的类
接口是一种特殊的抽象类

接口和抽象类相比较 特殊在哪里

1.接口中的方法,必须全都是抽象方法。但是不使用关键字abstract来修饰方法
2.声明接口需要interface
3.接口里面的权限都是共有的public
4.接口中的成员属性必须都是常量,不能有变量。

注意:

1.可以使用关键字extends继承另一个接口,但是接口和接口之间是扩展关系,没有覆盖(重写)方法的关系
2.可以使一个类用关键字implements来实现接口中的全部方法。
可以使一个抽象类用关键字implements来实现接口中的部分方法。
3.使用extends关键字使一个类来继承一个类的同时,在使用implements关键字实现一个或者多个接口(先继承在实现)
4.实现多个接口时,需要用逗号分开。

多态

多态的思想:同一操作作用于不同的对象,会产生不同的执行效果。
技术要求:必须有继承关系,父类最好是接口或者抽象类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值