首页 > 代码库 > 面向对象1

面向对象1

面向对象与面向过程编程的区别

面向过程流程较为简单,适合一些短期的小项目;

面向对象模块化更深,安全性更加强,数据更加封闭

从前期开发的角度来看,面向对象比面向过程要复杂的多,但是从维护和升级的角度来看,面向对象远比面向过程简单!

面向对象的语法规则

创建一个类

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(数据)

面向对象1