OOP的介绍
定义
面向对象程序设计php
面向对象的优势
分工明确
提升开发效率
提升项目的灵活性
提升项目的可扩展性json
特色
封装
继承
多态数组
对象的操做
实例化一个对象
new 类名();
new 类型;缓存
定义类
成员属性 修饰符
成员方法 修饰符安全
对象和类
对象 类的实例 例如:房子
类 对象的抽象 例如:房子的图纸函数
对象实例化 和 调用
new 类名() $this->this
对象在内存中的存储
对象名(地址)保存在栈中 先进后出
对象内的代码保存在堆里 先进先出设计
封装性3d
定义 把成员属性和成员方法 设置为非公有,就称为封装性code
特色
被封装的属性/方法 没法在外部调用
只能经过$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__当期所在空间的空间名