面向对象常用代码
类定义:class关键字
访问控制修饰符:(public|protected|private)
类的实例化:关键字new
访问属性:对象变量->属性名(属性名不能有$符号)
调用方法:对象变量->方法名()(这里的小括号不能省略)
$this关键字
PHP会自动的调用:__construct();
析构方法:__destruct();
删除一个对象:unset(对象变量);
对象的克隆:新对象 = clone 已有的对象;__clone方法
instanceof运算符:
对象变量 instanceof 类名;
作用:判断一个对象是否为某一个类的一个实例,返回布尔值。
静态变量:使用关键字static
静态变量访问的语法形式为:类名::静态属性名
在某个类的内部,访问静态成员:使用关键字self来代替当前的类名
无论采用什么方式调用静态方法,里面都不可以使用$this关键字,因为$this本身就体现了各个对象“独自”占用方法的含义! 要想使用$this关键字,只能调用非静态方法!
类常量(类常量需要找到类才能访问)
语法定义:const 常量名=值;
访问语法形式:类名::常量名
类文件的自动加载机制
类文件的自动加载:__autoload();
注册自动加载方法
注册成自动加载函数:spl_autoload_register(‘函数名’);
注册非静态自动加载方法:array(对象变量,非静态方法名);
注册静态自动加载方法:array(类名,静态方法名);
注册静态自动加载方法:spl_autoload_register(‘类名::静态方法名’);
数据的序列化与反序列化
向文件写入数据:file_put_contents
从文件读取数据:file_get_contents(文件地址)
序列化:serialize(),将原始数据转换为可以用于保存和传输的字符串数据
反序列化:unserialize(),将序列化之后的字符串数据,转换为原始数据
对象的序列化与反序列化
检查文件或目录是否存在:file_exists
__PHP_incomplete_class
__sleep():
触发时机:在序列化一个对象的时候,由系统自动触发执行!
作用:该方法用于规定哪些属性需要被序列化,实现的方式为:返回一个索引数组,数组内的元素为需要被序列化的属性名的集合!
__wakeup():
触发时机:在一个对象反序列化的时候,由系统自动触发执行!
作用:在反序列化一个对象的时候,完成该对象的初始化工作!
类的继承
继承的关键字:extends
重写override
调用的方法为:父类名::父类同名方法
parent关键字
访问控制修饰符
public:公共的,当前类内,继承链类内和类外都可以被访问到,访问范围是最大的!
protected:受保护的,当前类内和继承链类内可以被访问到,类外不能访问!
private:私有的,只有当前类内可以被访问到,其他类内和类外都不能访问!\
提高MySQLDB的封装性
第一步:将相关的属性改成private
第二步:私有化相关方法
sql查询语句的结果的三种形式
多行多列:fetchAll
一行多列:fetchRow
单行单列:fetchColumn
最终类final
最终类:final类,不能被继承,只能实例化对象的类!
抽象类:abstract类,不能实例化,只能被继承的类!
最终方法:
final method,在一个方法名的前面加上final关键字,就变成了一个最终方法!从语法上规定不能被子类重写的方法。
interface接口:关键字就是interface!接口不是类,只是类的一种规范
接口:接口常量(关键字const),抽象方法(不需要使用abstract关键字);
接口的定义:interface I_自定义名字{ };
implements关键字:使该接口作用到类上面
PHP中的重载
指的是对不可访问的成员的处理方式,称之为成员的重载(包括属性重载和方法重载)
为不可访问的属性赋值的时候 __set()
触发时机:为一个不可访问的属性赋值的时候!
作用:系统默认的是行为是允许将一个不存在的属性重新载入到一个类的内部,但是,一旦定义了__set()这个魔术方法,处理权就交给用户自己了!
获得不可访问的属性的值的时候 __get()
触发时机:当获取一个不可访问的属性的值的时候!
作用:系统默认的是行为是报告一个Notice级别的错误,但是,一旦定义了__get()这个魔术方法,处理权就交给用户自己了!
删除不可访问的属性的时候 __unset()
触发时机:删除一个不可访问的属性的时候
作用:系统默认的行为是报错,如果加入了__unset方法,此时决定权就在用户自己了!
判断不可访问的属性是否存在的时候 __isset()
触发时机:当判断一个不可访问的成员是否存在的时候
作用:系统默认的行为是返回false,但是一旦加入了__isset魔术方法,决定权又交给用户了!
方法重载
__call():
触发时机:当调用一个不可访问的非静态方法(对象方法)的时候,会自动执行该魔术方法!
__callstatic():
触发时机:当访问一个不可访问的静态方法的时候,会自动执行该方法!注意:需要在该方法的前面加上static关键字!
魔术方法和相关的魔术常量
__invoke()
触发时机:当把对象当做一个函数或方法来调用的时候,会自动执行该魔术方法!目前用的不是太多!
__toString()
触发时机:将一个对象当做一个字符串来使用的时候,会自动触发该方法!
单例模式(“三私一公”)
1、 增加用于保存对象的私有静态属性
2、 把构造方法私有化
3、 增加一个可以获得单例的公共方法
4、 将__clone私有化
工厂模式
MySQLDB的属性重载
1、__unset什么都不做!
2、__isset只给用户查询一些设置的连接属性
3、__get中只给用户看一些用户连接的信息
4、__set中也只给用户设置一些基本连接信息
自定义遍历
初始化指针、判断指针是否合法、获取值、获取键、移动指针
类和对象的相关函数
class_exists()
判断一个类是否存在
需要一个参数就是类名!
interface_exists()
判断一个接口是否存在,也需要一个参数是,接口的名字!
method_exists()
判断一个方法是否存在!
get_class()
获得该对象所属的类!
get_parent_class()
获得该对象所属的父类!如果该对象没有父类,就返回false!
get_class_methods()
需要一个参数,就是某个类名!
返回一个索引数组,里面的元素就是该类的方法的名字!
get_class_vars()
需要一个参数,就是某个类名!
返回一个索引数组,里面的元素就是该类的属性的名字!
公开的静态方法和非静态方法都可以获取到,但是受访问控制的限制!
is_object
判断某个变量是否为一个对象!
命名空间初步
关键字namespace
空间的定义
namespace 空间名字;(进入到某个空间的语法和定义一个空间的语法是一样的)
空间成员的概念
命名空间本身只“管辖三种成员:常量、函数和类!
PHP提供了三种访问空间成员的方式:
1、非限定名称访问
2、限定名称访问
3、完全限定名称访问
空间引入和空间类的引入
空间类的引入
第一种:就是使用完全限定名称访问就行了!
第二种:把First空间里面的Student类引入到当前空间(Second空间)
把其他命名空间的类引入到当前空间的语法形式为:
use 空间名\类名