zoukankan      html  css  js  c++  java
  • php面向对象学习笔记

    1、写类的要点:
    类名要具有描述性,有意义
    驼峰式命名 如:class GirlFriend
    2、 类里面的变量--成员属性
    类里面的函数--成员方法
    3、在类的成员属性前面一定要有一个修饰词,如果不知道是用什么修饰词,就可以使用var(关键字),如果一旦有其他的修饰词就不要有var

    4、构造方法 __construct();
    Ⅰ 、是对象创建完成以后,第一个自动调用的方法(特殊)
    Ⅱ、方法名称比较特殊,可以和类名相同名的方法名
    Ⅲ、给对象中的成员赋初值使用的
    5、析构方法 __destruct();
    在对象被销毁之前自动调用
    不能带有任参数
    主要用于释放资源(如关闭文件,释放结果集等)

    6、魔术方法:
    __get()
    1、自动调用:是在直接访问私有成员的时候,自动调用! 一个参数
    __set()
    1、自动调用:是在直接设置私有属性值的时候,自动调用! 两个参数
    __isset() isset() 在使用isset()判断一个私有属性是否存在时,自动调用__isset()魔术方法,参数则是属性名称
    __unset() unset() 在使用unset()删除一个私有成员的时候,自动调用__unset()魔术方法,参数为属性名称

    面向对象的编程思想的三个特性: 封装性、继承性、多态

    7、继承 --- 扩展 extends
    ① 子类使用extends继承父类,子类可以将父类中所有的内容都继承过来
    ② private是私有的,只能自己用,不能别人用,包括自己的子类也不能用
    ③ protected 这个是保护的权限, 只能是自己和自己的的子类中可以使用的成员,不能在外面使用
    ④ public 这个是公开的权限,所有都可以, 自己和子类,类外部都可以使用

    8、常见关键字
    instanceof
    “instanceof”操作符用于检测当前对象实例是否属于某一个类的类型
    final
    在php中final不定义常量,所以就不会使用,也不能用final来修饰成员属性
    1、final可以修饰类 -- 这个类不能去扩展,不能有子类(不让别人去扩展,这个类是最终的类时)
    2、final可以修饰方法 -- 这个方法就不能在子类中覆盖(不让子类去改这个方法,或扩展这个方法的功能时,这个方法也就是最终的方法)
    static
    static可以修饰属性和方法,不能修饰类,
    1、使用static修饰成员属性,存在内存的初始化静态段
    2、可以被所有同一个类的对象共用
    3、第一次用到类(类名第一次出现),类在加载到内存时,就已经将静态的成员加到了内存
    对象 -> 成员
    类 :: 成员
    4、静态的成员一定要使用类来访问
    5、self可以在类的方法中,代表自己类的($this)
    6、静态成员一旦被加载,只有脚本结束才会被释放掉
    7、在静态的方法中是不能访问非静态成员
    8、只要能使用静态的环境下声明方法,就最好使用静态方法(主要考虑效率)

    9、单态(单例、单件)设计模式 -- 最适合php使用这个设计模式
    1、如果想让一个类只能有一个对象,就要先让这个类不能创建对象,将构造方法private
    2、可以在类的内部使用一个静态方法来创建对象

    10、对象串行化(序列化)
    1、将对象转成字符串(不用看懂) --- 串行化(serialize)
    2、将字符串转回对象 --- 反串行化(unserialize)

    注意(串行化的时机):
    1、将对象在网络中传输
    2、将对象持久保存
    数组串行化 json -- javascript object
    1、eval()函数 -- 检查并执行php代码
    var_dump()
    var_export() -- 返回关于传递给该函数的变量的结构信息
    __set_state()魔术方法,就是在使用var_export()方法时,导出一个类的信息时,自动调用的方法(静态的、公共的)
    __invoke()魔术方法 ,是在对象实例之后,直接像变量函数调用时,自动调用这个方法(静态的、公共的) php5.3以后新加的方法
    __call()魔术方法,是在调用不存在的方法时,自动调用这个方法
    __callStatic()魔术方法,是在调用不存在的静态方法时,自动调用这个方法(静态的、公共的)
    __autoload()魔术方法,可以写在类外面,只要在这个脚本中,需要加载类的时候(必须用到类名),就会自动调用这个方法

    11、抽象方法和抽象类
    1、什么是抽象方法?
    定义:一个方法如果没有方法体(一个方法,不使用“{}”,直接使用分号结束的方法,才是没有方法体的方法),这个方法就是抽象方法
    一、声明一个方法,不使用{},而直接用分号结束。
    二、如果是抽象方法,必须使用abstract(抽象关键字来修饰)。
    2、什么是抽象类?
    一、如果一个类中有一个方法是抽象方法,则这个类就是抽象类
    二、如果声明一个抽象类,则这个类必须要使用abstract关键字来修饰

    注意1:
    1、只要使用abstract修饰这个类,这个类就是抽象类
    2、抽象类是一种特殊的类,特殊在哪里(在抽象类中可以有抽象方法)
    3、除了在抽象类中可以有抽象方法以外,和正常的完全一样
    注意2:
    1、抽象类不能实例化对象,也就是抽象类不能创建出对象
    2、如果看见抽象类,就必须写这个类的子类,将抽象类中的抽象方法覆盖(加上方法体)
    3、子类必须全部实现(覆盖重写)抽象方法,这个子类才能创建对象,如果只实现部分,那么还有抽象方法,则类也就必须是抽象类

    抽象方法的作用:
    抽象方法的作用是规定了子类必须有这个方法的实现,功能交给子类
    只写出结构,而没有实现,实现交给具体的子类(按自己的功能)去实现
    抽象类的作用:
    就是要求子类的结构,所以抽象类就是一个规范
    abstract class Person{
    public $name;
    public $sex;
    //抽象方法
    abstract function say();
    abstract function eat();
    public function run(){
    echo 'run';
    }
    public function sleep(){
    echo 'sleep';
    }
    }

    12、面向对象中的接口技术
    抽象类是一种特殊的类,接口是一种特殊的抽象类,所以接口是一种特殊特殊的类
    1、抽象类和接口都有抽象方法
    2、抽象类和接口都不能创建实例对象
    3、抽象类和接口的使用意义也就是作用相同

    接口和抽象类相比,特殊在哪里?
    1、接口中的方法,必须全部是抽象方法(不能用不抽象的方法)
    所以在接口中的抽象方法不需要使用abstract,直接使用分号结束即可
    2、接口中的成员属性必须是常量,不能有变量
    3、接口中所有的权限都必须是共有的(public)
    4、声明接口不使用class,而是使用interface
    接口应用的一些细节:
    1、可以使用extends,让一个接口继承另一个接口(接口和接口 -- 只有扩展新抽象方法,没有覆盖的关系)
    2、可以使用一个类来实现接口中的全部方法,也可以使用一个抽象类,来实现接口中的部分方法
    (类与接口, 抽象类与接口 -- 覆盖 -- 重写,实现接口中的抽象方法)
    3、就不要使用extends关键字,使用implements实现, implements相当于extends
    extends继承(扩展),这个在php中,一个类只能有一个父类
    4、一个类可以在继承另一个类的同时,使用implements实现一个接口,可以实现多个接口(一定要先继承,再实现接口)
    5、实现多个接口,只需要使用逗号分开多个接口即可

    //声明一个接口使用interface
    interface Demo{
    const NAME = '张三';
    const SEX = '男';
    function test1();
    function test2();
    function test3();
    }

    13、PHP面象对象的特性多态
    多态特性
    1、程序扩展准备
    技术:
    1、必须有继承关系,父类最好是接口或者抽象类

    14、命名空间 -- 名字空间
    1、常量
    2、函数
    3、类
    一、namespace来声明
    二、在namespace声明命名空间的代码上面,不能有任何PHP代码和HTML内容输出(除了declare),声明命名空间只能是第一条
    三、定义多个命名空间,以最后一个为准
    四、在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间(不要在大括号外部加任何代码)


  • 相关阅读:
    Rails中使用图表(ChartJs)显示数据
    Ubuntu下sublime无法输入中文问题完美解决
    ruby--$:.unshift File.expand_path('..', __FILE__)(转载)
    消息闪现
    Rails中编写自己的任务
    Rails定时任务
    rails中设置配置信息 读取配置信息
    在lib下编写的自己的类需要用到model内相关方法
    rails_ajax 验证验证码
    rails添加验证码
  • 原文地址:https://www.cnblogs.com/lsxy/p/3939556.html
Copyright © 2011-2022 走看看