面向过程
①以事件为中心的编程思想
②分析出解决问题所需要的步骤
③再为函数把这些步骤一步一步的实现
④使用的时候依次调用类和对象之间的关系
对象是类的实例,类是对象的模板如何声明一个类
用关键字class xxx{}
如何抽象一个类
①成员属性:修饰符 $变量名
常用的修饰符:public,protected,private,static,var(过时)
②成员方法:[修饰符] function 方法名(){}
常用的方法修饰符:public,protected,private,static,abstract,final
实例化对象
实例xxx new 类xxx(); || 对象访问属性或方法用"->"
特殊的对象引用 $this (只要是对象中的成员,必须使用这个对象来访问这个对象内部的属性和方法)
构造方法
①它是对象创建完以后,第一个自动调用的方法(特殊)
②构造方法名称比较特殊,可以和类名同名
③给对象的成员属性赋初值使用
④魔术方法:__construct(){}
析构函数
①对象释放前最好调用的方法
②没有参数和返回值
③魔术方法__destruct(){}
面向对象之“封装性”
①方法的封装(将一些“特殊的方法”加上关键字private修饰。只有类中其他成员可以使用这个方法,但类外部不能使用)②属性的封装(将成员属性设置private或protected。只有在类中可以使用,类外部不能使用)
③有关封装性的4种魔术方法:
<1>__get(){}
在类外直接访问私有成员时,自动调用。含一个参数
<2>__set(){}
在类外直接设置私有属性时,自动调用。含两个参数
<3>__isset(){}
在类外使用isset()判断私有属性时,自动调用
<4>__unset(){}
在类外使用unset()判断时,自动调用面向对象之”继承性”
<1> 子类使用”extends”继承父类
<2> 若父类设置”private”私有化,那就代表此类只能自己用,子类不能用
<3> 若父类设置”protected”保护化,那就代表只能自己和自己的子类使用,外界不能用
<4> 若设”public”公有化,那就代表自己、子类、类外部均可用使用
<5> 继承性图说明:
继承中的重载(覆盖)
①子类中可以写与父类同名的方法
②使用parent::
访问父类中被覆盖的方法
③子类中的构造方法,用来去覆盖父类中的构造方法。一定要在子类的最上面调用一下子父类中被覆盖的方法
④子类的权限只能大于或等于父类的权限面向对象中常见的关键字
①instanceof
关键字(用于检测当前对象实例是否属于某一个类)
②final
关键字(在php中final不定义常量,也不会使用,也不能使用final来修饰成员属性)
<1> final可以修饰类(那么这个类将不能被继承,是最终的类)
<2> final可以修饰方法(那么这个方法不能在子类中覆盖、重写)③
static
关键字
<1>可以修饰属性和方法,但不能修饰类
<2>修饰成员属性,它被存在内存的初始化静态区
<3>第一次用到类时,则会被加载到内容
<4>static静态成员一定要使用类来访问(对象:”->成员” || 类:”::成员”)
<5>self::可以用在类中的方法中代表本身类
<6>在静态方法中,不能访问非静态成员
<7>脚本结束,释放静态成员<8>“单例|单态|单件”设计模式
A.若想让一个类只有一个对象(将构造方法private私有化)
B.在类的内部使用一个静态方法来new Object④const关键字(类中声明常量)
<1> 只能修饰成员属性,定义常量
<2> 类中常量的方式与访问static方式相同,只能读
A. 在类外: 类名::常量
B. 在类中:self::常量其余面向对象的魔术方法
①__toString(){}
<1> 当在直接使用echo、print、printf来输出一个对象的引用时,自动调用
<2> 作用:返回对象其本信息“字符串”且不能用参数
②__clone(){}
<1>使用clone关键字
<2>是在克隆对象时,自动调用
<3>作用:与构造方法一样,来初始化克隆对象
③__call(){}
<1>在调用一个类中不存在的方法时,自动调用
<2>带两个参数:$method(不存在方法名)/$argus(不存在参数)
<3>作用:提示信息(自定义) || 将功能相似的方法,用此方法改写④
__set_state(){}
<1> eval() 检查并执行php代码 “将字符串转变成php代码”
<2> var_export() 打印合法的结构信息
<3> 在使用var_export()函数时,要导出一个类的信息时自动调用
<4> static必有一个数组参数
⑤__invoke(){}
(在对象引用后加上()调用时 自动调用)
⑥__callstatic(){}
(在调用不存在的静态方法时自动调用,与__call()相似)
⑦__autoload(){}
<1> 自动加载类(文件名要规范)
<2> 需加载类的时候(必须用到类名),自动调用
<3> strtolower() 字符串全部转为小写对象串行化(序列化)
①基本概念
<1>将对象转成字符串(串行化或序列化)
<2>将串行化字符串转回成对象(反串行化)
②串行化时机
<3>把对象使用在网络中传输
<4>将对象持久保存
③魔术方法
<5>__sleep(){}
在进行串行化的时候,自动调用 作用:可以设置需要串行化对象的成员属性,返回个数组
<6>__wakeup(){}
在进行反串行化的时候,自动调用作用:初始化串行回来的对象,如:__construct(){} | __clone(){}
php数组的串行化(JSON格式)
①json_encode()
串行化
②json_decode()
反串行化,若第二个参数为true则返回数组抽象方法和抽象类
①抽象方法
<1> 若一个方法没有方法体,则这个方法就是抽象方法
<2> 方法体:声明一个方法,不使用{},直接分号结束
<3>关键字 abstract②抽象类
<1>若一个类中有一个抽象方法,则这个类称为抽象类
<2>关键字abstract
<3>用abstract修饰的类为抽象类
<4>抽象类中既可以有抽象方法也可以有其他方法
<5>抽象类不能实例化对象
<6>若为抽象类则必须写这个类的子类,将抽象类中的抽象方法全部重写
<7>其子类必须重写抽象方法(全部)③作用
<1>抽象方法作用:规定子类必须有这个抽象方法的实现,功能自定
<2>抽象类作用:规定子类的结构,这样起到一个规范作用php面向对象中的接口技术
①与抽象类的相同点
<1>抽象类和接口都有抽象方法
<2>均不能实例化对象
<3>均起到规范性的作用②区别
<1>接口中的方法,必须全是抽象方法(不用修饰词abstract)
<2>成员属性,必须是常量
<3>权限必须为public
<4>声明用interface关键字③接口细节问题
<1>接口继承接口(extends)
<2>类与接口、抽象类与接口(implements)
<3>类 extends 类 implements 接口 (先继承后实现接口)
<4>若要实现多接口,用逗号分隔面向对象的多态性(必须有继承关系,父类最好是抽象类或接口)
- php命名空间(针对常量、函数、类)
① namespace 空间名
②在namespace声明命名空间的代码前面不能有任何php代码\html输出,除declare外,只能放在代码的第一行
③子命名空间 namespace ljx\ltt
④别名、导入: use….as…
PHP中面向对象
最新推荐文章于 2025-05-06 13:16:35 发布