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),声明命名空间只能是第一条

    三、定义多个命名空间,以最后一个为准

    四、在实际的编程实践中,非常不提倡在同一个文件中定义多个命名空间(不要在大括号外部加任何代码)

  • 相关阅读:
    内网穿透之 ssh 转发
    如何解决pytorch 编译时CUDA版本与运行时CUDA版本不对应
    如何监控GPU使用情况并杀死指定其中进程
    Screen 常用命令+VNC 启动停止命令总结
    C++快速文件输入输出
    Pycharm使用宝典
    Docker软件安装系列。
    Docker自动清理日志
    consul集群搭建说明
    jenkins搭建可以支持【FTP】上传功能的项目
  • 原文地址:https://www.cnblogs.com/leole/p/4236298.html
Copyright © 2011-2022 走看看