PHP序列化&反序列化从零开始
* 1、什么是序列化
就是将一个对象或者数组(概括为类)转化成一个字符串。
//$s = serialize($变量)
*2、什么是反序列化
将一个字符串转化成一个对象或者数组(概括为类)
//$变量 = unserialize($s)
将对象的状态信息转换为可存储或者可传输的过程就是序列化反之就是反序列化,主要就是为了方便对象的传输
3、php序列化后的基本类型表达
1.布尔型(bool): b :value=>b:0
2.整数型(int): i:value=>:1
3.字符串型(str): s:length:"value";=>s:4:"aaaa"
4.数组型(array): a<length>:{key,value,pairs};=>a:1:{i:1;s:1:"a"}
5.对象型(object): O:<calss_name_length>:
6.NULL型:N
- 序列化
注释:对属性或方法的访bai问控制,是du通过在前面添加关键字 public(公有),protected(受保护zhi)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问
<?php
class name {
public $username;
public $password=15;
public $test;
}
$name = new name;
$b=serialize($name);
echo($b);
?>
//O:4:"name":3:{s:8:"username";N;s:8:"password";i:15;s:4:"test";N;}
其中,O表示这是一个对象,4是对象的长度,name为对象名,3表示有3个属性,分别是username,password,test,s表示属性为字符串,8表示属性的长度,N表示属性的值为空号(NULL),i表示属性password的整数型15
- 反序列化
<?php
$str = 'a:3:{i:0;s:6:"Google";i:1;s:6:"Runoob";i:2;s:8:"
$unserialized_data = unserialize($str);
print_r($unserialized_data);
?>
//
Array
(
[0] => Google
[1] => Runoob
[2] => Facebook
)
4 、php的魔术方法
__construct 当一个对象创建时被调用,
__destruct 当一个对象销毁时被调用,
__toString 当一个对象被当作一个字符串被调用。
__wakeup() 使用unserialize时触发
__sleep() 使用serialize时触发
__destruct() 对象被销毁时触发
__call() 在对象上下文中调用不可访问的方法时触发
__callStatic() 在静态上下文中调用不可访问的方法时触发
__get() 用于从不可访问的属性读取数据
__set() 用于将数据写入不可访问的属性
__isset() 在不可访问的属性上调用isset()或empty()触发
__unset() 在不可访问的属性上使用unset()时触发
__toString() 把类当作字符串使用时触发,返回值需要为字符串
__invoke() 当脚本尝试将对象调用为函数时触发
php面向对象编程之构造方法__construct()
//php中构造方法是对象创建完成后第一个被对象自动调用的方法。在每个类中都有一个构造方法,如果没有显示地声明它,那么类中都会默认存在一个没有参数且内容为空的构造方法,
构造方法被用来执行一些有用的初始化任务,如对成员属性在创建对象时赋予初始值
1.构造方法的在类中的声明格式:
function __constrct([参数列表]){
方法体//通常用来对成员属性进行初始化赋值
}
2.
<?php
class person{
public $name;
public $age;
public $sex;
pubilc function __consteruct($name="",$sex="男",$age=20){ //带参的构造方法
$this->name=$name;
$htis->sex=$sex;
$this->age=$age;
}
public function say () {
echo "我叫": ".$this->name.", 性别:".$this->sex.",年龄:".this->age"
}
}
$Person3= new Person("BOY","男",20);
echo $Person3->say();//输出:我叫:BOY,性别:男,年龄:20
?>