面向对象与面向过程编程的区别
v 面向过程流程较为简单,适合一些短期的小项目;
v 面向对象模块化更深,安全性更加强,数据更加封闭
v 从前期开发的角度来看,面向对象比面向过程要复杂的多,但是从维护和升级的角度来看,面向对象远比面向过程简单!
面向对象的语法规则
创建一个类:
class 类名{}
类属性
类内有类属性,语法规则 例:
class 类名{
public $属性名;
}
属性名通过实例化一个对象后通过对象调用
对象
对象的创建语法及实例化
$对象名=new 类名;
对象调用属性的语法:
$对象名 ->属性名(ps:没有$)
类方法
类方法顾名思义就是写在类里面的方法
语法:
class 类名{
Public function 方法名(){}
}
方法内的关键字$this
面向对象调用方法跟调用属性是一样的
但是,如果我通过这个方法更改类内的属性的时候,脚本不知道是谁调用的,这个时候就需要$this这个关键字
$this:当前调用这个方法的对象
语法:
$this->调用属性or调用方法
构造方法
实例化一个对象的时候系统自动触发的函数方法
函数名:__construct()
如果这个方法有形参的话,实参在那里输入?
例:
$对象名=new 类名(实参);
析构方法
函数名:__destruct()
在对象要消失的时候系统自动触发的函数,对象消失一般有两种情况,删除对象跟脚本结束
一般不带参数
对象的传值
对象跟变量一样都有值传递跟引用传递
不过,对象的值传递跟引用传递都是一样的,效果都是引用传递的效果,所以一般使用值传递就可以了
写法跟变量的一样
对象的克隆
语法:
新对象名=clone 要克隆的对象名
克隆对象不会触发构造方法,因为构造方法是在实例化一个对象的时候触发的,但是克隆不是实例化对象,可以理解为复制
不过克隆之后与原先对象有一定的区别,值跟属性存放的空间不一样
如果想要让克隆对象也拥有一个构造方法的话
需要用到魔术方法__clone
可以将这个魔术方法比喻成这个克隆对象的构造方法,跟构造方法几乎一样
静态成员
静态属性
语法:
类名::$静态属性名
调用静态属性的时候与普通属性有个区别,属性名前需要加$
定义一个静态属性需要一个关键字static
例:
public static 静态属性名
如果在类内访问静态成员的话可以使用self这个关键字替代类名
静态方法
静态方法跟静态属性一样都需要加上static 这个关键字
静态方法与非静态方法的区别为:
非静态方法可以说是对象的方法,由对象使用;
静态方法是由类调用;
类常量
就是指在一个类中定义的常量,其实和普通常量没有什么区别,只是类常量需要先找到类才能访问常量!
类常量的声明
使用const 关键字
与属性的区别,声明的时候不需要加$
注意:类常量前不需要加任何访问修饰符
访问类常量的语法:
类名::常量名
类文件自动加载机制
一般来说,我们在项目中类文件的话会以类名.class.php的格式创建,因为这样是为了方便我们类文件自动加载。
函数方法:
__autoload (类名)所有与类有关的操作都会触发这个魔术方法
那么我们可以通过获取到的类名,自动加载出所要类的文件,例:
Public function __autoload ($class_name){
Include ‘./’.$class_name.’.class.php’;
}
但是这个方法只能使用一次,如果我们出现加载过来的类文件内也有这个自动加载函数的h话,那系统就会报错,所以这个时候,我们需要自己注册自动加载机制
注册自动加载机制
函数方法:
spl_autoload_register(函数名);
可以先写好多个方法,自动加载文件的方法,然后通过这个方法就可以将其他函数方法注册为自动加载方法,注意,因为参数是函数名,所以是需要加引号的!
对象的序列号与反序列
也叫作对象的串行化!
对象也是一种数据类型,既然是数据,就存在着需要被持久化存储的问题!
数据的存储
数据持久化存储的介质一般有两种:文件或数据库!
以保存到文件中为例:
回忆:
向文件写数据:
file_put_contents(文件地址,数据),返回值是写入的字符串的长度!
从文件读数据:
file_get_contents(文件地址)
但是如果直接写入内容的话无论写的是什么类型,都会被自动转变成字符串型,这样就违背了我们要存储数据的本心了
所以这个时候需要一个方法
数据序列化:serialize(数据)
将数据输出出来的时候就需要反序列话将数据输出
方法:unserialize(数据)