oop总结


OOP的介绍
  定义
    面向对象程序设计


  面向对象的优点
    分工明确
    提高开发效率
    提高项目的灵活性
    提高项目的可扩展性


  特点
    封装
    继承
    多态

 


对象的操作
  实例化一个对象
    new 类名();
    new 类型;


  定义类
    成员属性 修饰符
    成员方法 修饰符


  对象和类
    对象  类的实例     例如:房子
    类   对象的抽象  例如:房子的图纸


  对象实例化 和 调用
    new 类名() $this->


  对象在内存中的存储
    对象名(地址)保存在栈中 先进后出
    对象内的代码保存在堆里 先进先出

 

 


封装性


  定义  把成员属性和成员方法 设置为非公有,就称为封装性


  特点
    被封装的属性/方法 无法在外部调用
    只能通过$this-> 内部调用


  优点
    重用性
    可读性


  属性的封装
    实现 访问控制
    提升开发效率的同时,提醒我们对象封装的底线

 

 


继承


  定义  子类继承父类的成员属性与成员方法


  类继承的应用
    作用  

      通过继承可以简化类的定义
      方便扩展,扩展功能可以写在子类中,不会对原有父类产生影响
      方便升级,通过继承不但包含了旧的方法,还同时添加了新的功能


    特点
      单继承
      一个父类可以被多个子类继承
      一个子类只能继承一个父类


    子类重写父类的方法
      定义跟父类方法重名的就可以重写
      子类中调用父类方法 parent::funName()

 


魔术方法
    __construct()
        可选参数,对象被实例化时自动触发
        作用  给属性赋初值,用于打开资源
    __destruct()
        无法传参,属性销毁之前自动触发
        作用  关闭构造方法中打开的资源
    __get($param)
        一个参数,在外部使用非公有属性是自动触发
        作用  在外部访问非公有属性
        注意  __get()必须是public
    __set($params,$values)
        两个参数,在对象外部设置非公有属性时自动触发
        作用  在对象外部设置封装属性
        注意  __set()必须是public
    __isset($param)
        一个参数,在对象外部检测封装属性是否存在时自动触发
        注意  使用empty()判断非公有属性时,必须配合__get()一起使用
    __unset($param)
        一个参数,用unset()销毁一个非公有属性时自动触发
        注意  销毁公有属性时,由于可以直接访问,所以不需要再设置该魔术方法
    __clone()
        在该对象被克隆的时自动触发
        注意  如果封装该魔术方法,会导致该对象不能被克隆
    __toString()
        用echo或print输出对象时自动触发
        作用  必须return一个string,一般用于对象的描述信息
    __invoke()
        把对象当做函数调用时自动触发
    __call($funName,$params)
        两个参数(方法名,值)当调用对象不存在的方法时自动触发
        作用  当用户调用了不存在的操作时,用来做友好的提示
    __callStatic($funName,$params)
        两个参数(方法名,值)当调用对象不存在的方法时自动触发
        作用  当用户调用了不存在的操作时,用来做友好的提示
    __sleep()
        当对象被串行化时,自动调用
    __wakeup()
        当已被串行化的对象被反串行化时,自动调用
    __autoload()
        当new实例化一个不存在的类时,则自动调用此函数“__autoload()”,并将类名作为参数传入此函数
        作用  帮助判断是否存在需要加载的类

 

 

关键字


    final
        可以用于修饰类和方法,最终版本,不能被重写
        作用  提高代码的安全性,可读性
        注意  不能使用final来修饰成员属性
    static
        用于修饰属性和方法,静态属性,静态方法,不需要实例化
        作用  类中的几个方法没有太大联系时,可以声明为静态方法
        注意  静态属性是共享的。也就是new很多对象也是共用一个属性
            由于静态修饰后,每次访问都是访问的同一个,所以不存在继承问题
            在一个类的方法中若没有出现$this的调用,默认此方法为静态方法
            静态方法中不可以使用非静态的内容。就是不让使用$this
    const
        在类的内部 定义 常量
            内部 self::Name
            外部 类名::Name
        作用  给该类中的方法设置参数选项
    instanceof
        判断当前对象类是否属于某个类的类型 返回true/false
    abstract
        声明抽象方法和抽象类 有抽象方法的类就是抽象类
    串行化
        serialize()    串行化
        unserialize()    反串行化
        作用  把当前状态下的对象 连同对象格式与属性值的变换 转换为字符串格式
            对象是保存在内存中,寿命通常随着生成该对象的程序终止而终止,而串行化后的对象就可以实现永久存储,可以用做数据缓存
    json
        json_encode()  转化为json格式
        json_decode()  将被转化成json函数的数据还原
        作用  数组的永久存储
            便于不同语言之间的数据传输(接口)
    stdClass
        快速得到一个对象
        注意  凡是用 new stdClass()的变量都不可以出现$a->test()这种方式的使用
    类型约束
        约束方法和函数的传输类型
        作用  数组 array $param
            类 类名 $param
    namespqce
        前不允许有任何的php代码

 

 


接口


    定义  一个语法,和平时熟知的API接口没有一点关系,使用interface定义
    interface  声明接口时使用
    特点
        接口中的方法,必须全是抽象方法(所有无需abstract声明)
        接口的所有成员实现,必须是常量
        所得权限必须是public
        声明接口不使用class,使用interface
        接口可以被类继承实现全部方法,也可以被抽象类继承实现部分方法
        接口继承不能用extends,用implements
    inplements实现接口
        一个类在继承另一个类的同时,使用implements实现一个接口(一定要先继承在实现),可以实现多个接口,逗号隔开就好

 

 


异常处理


    错误处理
        错误级别
          parse error 解析错误
          fatal error 致命错误
          waring 警告
          notice 提示
          strict 规范建议
        自定义错误处理
          set_error_handler('funName')
          设置用户定义的错误处理函数,只能接收 waring 和 notice 错误


    异常处理
        一种可扩展,易维护的错误处理统一机制,提供了一种新的面向对象的错误错误处理方式
        异常处理方式  完全交给系统自带的系统自带的异常处理类    Exception 是所有PHP异常的基类

 

 


命名空间
    定义  命名空间就是逻辑层面的目录结构 相当于在代码中分了文件夹
    作用  在不同的目录中可以有相同的文件名 在不同的命名空间中可以有相同的名字
    基本规则
        命名空间的定义语句前面不能有任何PHP代码
        命名空间不能控制普通变量的访问,不同空间仍旧可以传递普通变量的值
        如果使用{}定义命名空间 那么括号外不能有任何代码
    限定名称
        非限定名称 test(); 当前空间下
        限定名称 A\test(); 相对路径 ./A/test()
        完全限定名称 \A\test(); 绝对路径 从全局命名空间出发
    常量
        __NAMESPACE__当期所在空间的空间名

 

posted @ 2017-06-09 11:31  杨慧慧啥都会  阅读(224)  评论(0编辑  收藏  举报