php类知识---最疯狂的魔术方法serialize,_sleep,__wakeup,unserialize,__autoload,__clone
- serialize-----把实例化的对象写入文件
- __sleep 调用serialize时触发
<?php class mycoach
{
public function __construct($name,$age,$expertin=[]){ $this->name = $name;
$this->age = $age;
$this->expertin=[];
$this->expertin=$expertin;
} public function __sleep()
{
return ['name','age','expertin'];
}
} $cpc = new mycoach('陈培昌',,['散打','泰拳', '巴西柔术']);
$srobj = serialize($cpc);
file_put_contents('cpcssecret.txt',$srobj);
?> 关键要点:
----类内部实现的 __sleep()要返回数组数据结构,元素都来自类的属性,以此达到控制哪些类可以写入文件
----serialize方法以对象为参数,返回值就是要写入文件的数据。
生成的文件中记录的对象形如:
O:7:"mycoach":3:{s:4:"name";s:9:"陈培昌";s:3:"age";i:22;s:8:"expertin";a:3:{i:0;s:6:"散打";i:1;s:6:"泰拳";i:2;s:12:"巴西柔术";}}
- unserialize-----把文件中的记录还原为类的实例对象
- __wakeup------执行unserialize时调用,用于执行一些初始化操作
<?php class mycoach
{
public function __construct($name,$age,$expertin=[]){ $this->name = $name;
$this->age = $age;
$this->expertin=[];
$this->expertin=$expertin;
} public function __sleep()
{
return ['name','age','expertin'];
} public function __wakeup()
{
#用途:还原对象(反序列化)的时候,执行一些初始化操作
echo "还原为对象"."\n"; }
} $objdate = file_get_contents('cpcssecret.txt');
var_dump(unserialize($objdate));
?> 输出结果:
还原为对象
object(mycoach)#1 (3) {
["name"]=>
string(9) "陈培昌"
["age"]=>
int(22)
["expertin"]=>
array(3) {
[0]=>
string(6) "散打"
[1]=>
string(6) "泰拳"
[2]=>
string(12) "巴西柔术"
}
}
- clone复制对象属性
- __clone可以限制哪些属性可以复制,哪些属性采用自定义
<?php class bt
{
protected $master = "徐晓冬";
private $age;
public function __construct($name,$srcfrom)
{
echo "欢迎来到必图拳馆,我是徐晓冬";
$this->name = $name;
//$this->age = $age;
$this->srcfrom = $srcfrom;
}
public function __get($master)
{
return $this->$master;
} public function __set($key,$value)
{
$this->$key = $value;
} public function self_introduce()
{
echo "大家好,我是 ".$this->name. " 今年芳龄 ". $this->age." 来自 ". $this->srcfrom." 我师父是 ".$this->master."\n";
} public function __clone()
{
$this->name = '丁大锅';
$this->age = ;
$this->srcfrom = '维基泄密';
} } /*$zilong = new bt('吴紫龙',21,'公安大学','徐晓冬');*/
$zilong = new bt('紫龙','公安大学');
$zilong->age=;
$zilong->self_introduce(); $dy = clone $zilong;
$dy ->self_introduce();
- __autoload 唯一在类定义体外使用的方法
<?php function __autoload($name)
{
echo "this one ".$name;
include($name.".php");
} $cpc = new bt('程劲','塔沟武校');
var_dump($cpc);
?> 输出结果: this one bt欢迎来到必图拳馆,我是徐晓冬object(bt)# () {
["master":protected]=>
string() "徐晓冬"
["age":"bt":private]=>
NULL
["name"]=>
string() "程劲"
["srcfrom"]=>
string() "塔沟武校"
}
php类知识---最疯狂的魔术方法serialize,_sleep,__wakeup,unserialize,__autoload,__clone的更多相关文章
- 魔术方法__sleep 和 __wakeup
感觉序列化和反序列化用得倒是比较少了,而json_encode和json_decode用得相对多,都是转化成串,进行入库.传输等.json更方便,但是序列化和反序列化结合这两个魔术方法使用倒还行< ...
- PHP与类有关的几个魔术方法
与类有关的其他魔术方法 序列化与反序列化技术 含义: 序列化: 就是将一个变量所代表的“内存”数据,转换为“字符串”形式并持久保存在硬盘上的一种做法. 反序列化: 就是将序列化之后保存在硬盘上的“字符 ...
- PHP 中 16 个魔术方法详解
PHP 中 16 个魔术方法详解 前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...
- 前端学PHP之面向对象系列第二篇——魔术方法
× 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这 ...
- PHP面向对象常见的关键字和魔术方法
在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对 ...
- php中的常用魔术方法总结
以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...
- php拦截器(魔术方法)
什么是PHP拦截器? 英文名称 “interceptor”,作用是 拦截 发送未定义的方法和属性的消息. 先看一段代码,定义了一个School类,实例化一个对象$obj,获取一个未定义的属性teach ...
- PHP魔术方法
魔术方法:两个下划线开头的格式. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, ...
- PHP的魔术方法
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods) 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对 ...
随机推荐
- Confluence与Jira安装及后期迁移问题记录
Confluence与Jira 由于线上jira和confluence之前互相关联,confluence的登录用户全部关联自jira的用户,confluence安装时会提示是否关联jira,由于这个问 ...
- WijmoJS 中自定义 React 菜单和列表项模板
WijmoJS 中自定义 React 菜单和列表项模板 在V2019.0 Update2 的全新版本中,React 框架下 WijmoJS 的前端UI组件功能再度增强. WijmoJS的菜单和类似列表 ...
- Points Division(线段树+DP)2019牛客暑期多校训练营(第一场)
题意:https://ac.nowcoder.com/acm/contest/881/I 给你n个平面上的点,每个点有a.b两个权值,现在让你划分成两个区域(要求所有A集合里的点不能在任何B集合里的点 ...
- ThinkPHP composer的安装,及image图像处理类库的加载
以下教程针对windows系统,示例系统使用win7 composer安装 下载composer安装包,点击安装. 出现'composer choose the command-line php' 要 ...
- Bootstrap3基础教程 03 导航栏
Bootstrap导航栏 创建一个默认的导航栏的步骤如下: 1.向 <nav> 标签添加 class .navbar..navbar-default. 2.向上面的元素添加 role=&q ...
- vue-cli3开干
npm install -g @vue/cli-service-global vue create hello-world
- 【Zabbix】分布式监控系统Zabbix【二】
一.Zabbix基本操作 1.主机群组.主机.模板.触发器 a.创建主机群组和主机的过程比较简单,不再介绍 b.配置模板: 创建一个模板,将其分组到Template组,添加配置应用: 给应用创建监控项 ...
- kali安装开启ssh & 安装docker
ssh相关 一.配置SSH参数 . 修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#PasswordAuthentication no的注释去掉,并且将N ...
- Python3简易接口自动化测试框架设计与实现(上)
目录 1.开发环境 2.用到的模块 3.框架设计 3.1.流程 3.2.项目结构 5.日志打印 6.接口请求类封装 接口开发请参考:使用Django开发简单接口:文章增删改查 1.开发环境 操作系统: ...
- 深入学习Mybatis框架(一)- 入门
1.什么是Mybatis? Mybatis是一个优秀持久层框架,提供了对数据库的一系列操作(增删改查).Mybatis可以避免重复的写JDBC代码,让我们以较少的代码实现对数据库的操作,从而提高开发效 ...