复习------php面向对象(1)

面向对象的优点
  1. 可读性
  2. 可重用性
  3. 扩展性
  4. 稳定性
  5. 维护性
  6. 可测试性
面向对象的三大特性
封装:封装是把对象属性和成员方法,加上访问修饰符,使其尽可能隐藏对象的内部细节,以达到对成员的访问控制(是访问的控制,而不是拒绝访问)
继承
  1. 把两个类或者多个类中的相同的部分可以提出来,父类(基类),子类(派生类)画图的时候箭头指向的是父类
  2. 对于php来说是单继承的。只能继承一个父类,但是一个父类可以有很多个子类
多态
  1. 多态的思想:同一操作作用于不同的对象,会产生不同的执行效果
  2. 技术要求:必须有继承关系,父类最好是接口或者抽象类
构造方法与析构方法
1.构造方法(实例化对象使用)
  1. 是对象创建完成以后,第一个自动调用的方法
  2. 是给对象中的成员赋初始值使用的
2.析构方法
  1. 对象释放前自动调用的方法
  2. 析构方法没有参数
PHP中的3种访问修饰符
public(公有的,默认的)
private(私有的)
protected(受保护的)
  1. 子类使用extends继承父类,子类可以将父类的所有内容都继承过来
  2. private是私有的,只能自己用,别人不能用,包括子类也不能用
  3. protected受保护的权限,只能是自己和自己的子类中可以使用,不能在除了自己和子类的外面使用
  4. public是公开的权限。自己,子类,类外都可以使用
  5. 只要在声明成员属性或成员方法时,使用private关键字修饰,就实现了对成员的私有封装,封装后的成员在外部时不能直接访问的,只能在对象的内部方法中使用$this来访问
魔术方法
  1. __set() 代替通用的set赋值方法,在直接设置私有属性时自动调用(该方法需要两个参数)

  2. __get() 代替通用的get赋值方法,在直接访问私有成员属性的时候自动调用(该方法需要一个参数)

  3. __isset() 是使用isset()方法判断一个私有属性是否存在时,自动调用__isset()魔术方法(参数是属性名称)

  4. __unset() 是使用unset()方法删除一个私有属性的时候,自动调用__unset()魔术方法(参数是属性名称)
    这四个魔术方法只对类中的私有属性或者是受保护的成员属性有效,魔术方法前的修饰符可以是公有的或私有的不影响调用

  5. __tosreing()
    ①我们在调用echo、print、printf 输出一个对象引用时(或者说输出一个对象地址时)自动调用这个方法
    ②我们可以把对象的基本情况放到__tostring()内部,形成字符串返回
    ③__string()方法中,不能有参数,必须有返回值,返回值必须时字符串类型的

  6. __clone()
    ①我们在使用clone关键字复制对象时自动调用的方法
    ②作用:对新克隆的对象进行初始化
    ③在这个魔术方法中的$this表示的时克隆之后的对象,也就是说代表的副本。

  7. __call()
    ①在调用对象中不存在的方法时,自动调用的方法
    ②需要有两个参数。第一个参数是调用的那个不存在的方法的方法名;第二个参数是调用的那个不存在的方法的参数。
    ③作用:如果方法不存在,可以写提示信息
    主要作用:可以将那些功能相似,但是方法名不同的方法采用这种方式来表示。

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

————————————————————————————————————————————

重写

继承中的重写(覆盖)——在子类中可以写和父类同名的方法
在子类中定义的与父类中同名的属性是对父类属性的重写(覆盖)
在子类中定义的与父类中同名的方法是对父类方法的重写(覆盖)
在子类中访问父类的方法: 类名::成员 parent::成员
只要是子类的构造方法,去覆盖父类的构造方法,一定要在子类的构造方法的最上边调用一下父类被覆盖的构造方法
重写(覆盖)的时候权限问题:子类只能大于或等于父类的权限,不能变小;私有的不能覆盖,而是完全当作自己全新的。
PHP里面类名和方法名是不区分大小写的,但是变量名是区分大小写的

————————————————————————————————————————————

关键字

instanceof— 操作符 — 用于检测当前的对象是否属于某一个类的类型
final —在java里面final可以修饰常量

final
  1. final只可以修饰类和方法,修饰类 final class Person{}
  2. final修饰的类不能扩展,即不能有子类,也就是说这个类是最终的类
  3. 修饰方法:public final function say(){}
  4. final修饰的方法,不能在子类中被重写,即这个方法就是最终的方法
static
static 修饰属性和方法,不能修饰类
  1. static修饰的成员属性,存在于内存的初始化静态段
  2. 可以被所有同一类的多个对象共用
  3. 类在第一次出现的时候,就把该类的静态成员加载到了内存中
  4. self:: 指的是本类
  5. 静态成员一旦被加载,只有脚本结束才释放
  6. 在静态方法中,不能访问非静态的成员
const

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

定义常量需要注意的几点
  1. 常量建议使用大写,不适用$
  2. 常量一定在声明的时候就给好了初值
  3. 常量只能读,不能修改
常量的访问方式
  1. 在类的外部 —— 类::常量名
  2. 在类的内部 —— self::常量名
单态(单例、单件)设计模式

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

如何保证让一个类只有一个对象
  1. 先让这个类不能创建对象,将构造方法变为private
  2. 在类的内部使用一个方法来创建对象,这个方法是静态的
抽象方法
  1. 定义:一个方法如果没有方法体,那么这个方法就是抽象方法
  2. 声明一个方法,不使用{},直接使用“;” 结束
  3. 如果是抽象方法,必须使用abstract关键字来修饰这个方法
抽象类
  1. 如果一个类中有抽象方法,那么这个类就是抽象类
  2. 如果是抽象类,必须使用abstract关键字来修饰这个类
抽象类和普通类的区别
  1. 抽象类是一种特殊的类,抽象类里面有抽象方法
  2. 抽象类不能实例化对象,也就是说抽象类不能创建出对象
抽象类的作用:抽象类是用来要求子类结构的,抽象类是一个规范
抽象方法的作用:抽象方法就是规定了子类必须有这个方法的规范,但是没有具体的实现,所以它交给子类来实现(重写)具体的功能(方法)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值