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(),在对 ...
随机推荐
- SpringBoot配置文件可存放位置和加载顺序
使用IDEA创建一个spring初始化项目后.默认的配置文件在resources文件夹下. SpringBoot启动时,会扫描application.properties或application.ym ...
- [bzoj1776][Usaco2010 Hol]cowpol 奶牛政坛_倍增lca
[Usaco2010 Hol]cowpol 奶牛政坛 题目大意: 数据范围:如题面. 题解: 第一想法是一个复杂度踩标程的算法..... 就是每种政党建一棵虚树,然后对于每棵虚树都暴力求直径就好了,复 ...
- [转帖]注解机制(Annotation,区别于comment)
[19/04/16-星期二] 注解机制(Annotation,区别于comment(传统意义上的注释)) 一.概念 作用: ——不是程序本身,可以对程序作出解释.(这一点和注释没什么区别) ——可 ...
- Linux、Aix(unix)、Oracle 银行外包开发运维常用命令
我一直是银行外包开发人员,常用的操作命令固然少不了,这是我一次自己边添加边使用的笔记.内容有点乱,希望可以帮到你. rm 文件或目录rm -f 文件或目录rm -rf * 跑路的时候用du -h 文件 ...
- 百度音乐接口api
百度音乐接口 百度音乐全接口 http://tingapi.ting.baidu.com/v1/restserver/ting 请求方式:GET 参数处理:format=json&calb ...
- 首篇-记录自己学习python之路!
对于自己学习python的目的比较明确——爬虫和量化. 目前找了一些资源进行学习,先进行量化方面的学习,爬虫滞后.目前的目标是“180天掌握尽可能多的量化能力”! 以后定时发送自己学习思考内容以作自己 ...
- h5中的结构元素header、nav、article、aside、section、footer介绍
结构元素不具有任何样式,只是使页面元素的的语义更加明确. header元素 header元素是一种具有引导和导航作用的的结构元素,该元素可以包含所有通常放在页面头部的内容.header元素通常用来放置 ...
- C#面向对象11 里氏转换
里氏转换 1.子类可以赋值给父类. using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- C# 添加log4net日志
一.添加log4net的Nuget包 二.在Web.config或者App.config文件中添加log4net配置 代码: <log4net> <!-- OFF, FATAL, E ...
- VSCode中Markdown目录显示异常
更新最新的VSCode之后编辑Markdown文件发现TOC标签的目录格式异常,发现是因为行尾字符导致,必须设置行尾字符进行解决.