PHP魔法方法与序列化和反序列化

序列化与反序列化

数组的序列化

$stu = ['tom','berry','ketty'];
$str = serialize($stu);//序列化
file_put_contents('./a.txt',$str);

数组的反序列化

$str = file_get_contents('./a.txt');
$stu = unserialize($str);
echo '<pre>';
var_dump($stu);
print_r($stu);
//对象的序列化与反序列化接近都类似

魔术方法

知识点:
1. __construct():构造函数
2. __destruct():析构函数
3. __clone():调用clone指令的时候调用
4. __tostring():将对象当成字符串使用的时候自动调用
5. __invoke():将对象当成函数的时候自动调用
6. __set():给无法访问的属性赋值的时候自动调用
7. __get():获取无法访问的属性自动调用
8. __isset():判断无法访问的属性是否存在自动调用
9. __unset():销毁无法访问的属性的时候自动执行
10. __call():调用无法访问的方法时自动执行
11. __callstatic():调用无法访问的静态方法的时候自动执行
12. __sleep():当序列化的时候自动执行
13. __wakeup():当反序列化的时候自动执行

clone与__clone()

1. 创建对象的方法有:
2. 实例化
3. 克隆
class Student{public function __clone(){echo '正在克隆对象<br>';}
}
$stu = new Student();
$stu2 = clone $stu;
var_dump($stu,$stu2);//object(Student)#1 (0) { } object(Student)#2 (0) { }
echo '<br>';
小结:
1. clone的创建对象方法之一
2. 当执行clone指令的时候,会自动调用__clone()方法

__tostring和__invoke

class Student{//把对象当成字符串使用时自动执行public function __toString(){return '这是一个对象,不是字符串<br>';}//把对象当成函数使用的时候自动执行public function __invoke(){echo '这是一个对象,不是函数<br>';}
}
$stu = new Student;
echo $stu;//当成字符串使用
$stu();//当成函数使用

__set()__get()__isset()

class A{private $name;private $sex;private $age;//给无法访问的属性赋值的时候自动调用public function __set($name, $value){$this->$name=$value;}//获取无法访问的属性值的时候自动执行public function __get($name){return $this->$name;}//判断无法访问的属性是否存在自动调用public function __isset($name){return isset($this->$name);}
}
//测试
$a = new A();
$a->name='tom';
$a->sex='男';
$a->age=22;
echo $a->name,'<br>';//tom
var_dump(isset($a->name));//bool(true)

例题

class B{private $name; //读写属性private $add='中国'; //只读属性private $age; //只写属性public function __set($name, $value){if (in_array($name,array('name','age'))){$this->$name=$value;}else{echo "{$name}属性是只读属性<br>";}}public function __get($name){if (in_array($name,array('name','add'))){return $this->$name;}elseecho "{$name}是只写属性<br>";}
}
//测试
$b = new B();
$b->name='tom';
$b->age=88;
echo '姓名:'.$b->name,'<br>';
echo '地址:'.$b->add,'<br>';

__call()__callstatic()

class C{public function __call($name, $arguments){echo "{$name}不存在<br>";}public static function __callStatic($name, $arguments){echo "{$name}静态方法不存在<br>";}
}
$c = new C();
$c->show(11,22);//show不存在
C::show();//show静态方法不存在

__sleep()__wakeup()

class E{private $add='中国';private $name;private $sex;public function __construct($name,$sex){$this->name=$name;$this->sex=$sex;}//序列化的时候自动调用public function __sleep(){return array('name','age');}//反序列化的时候自动调用public function __wakeup(){$this->type='学生';}
}
//测试
$e = new E('TOM','男');
$str = serialize($e);
echo $str,'<br>';//O:1:"E":2:{s:7:"Ename";s:3:"TOM";s:3:"age";N;}

使用魔法方法实现重载

class Math{public function __call($name, $arguments){$sum = 0;foreach ($arguments as $v):$sum+=$v;endforeach;echo implode(',',$arguments).'的和为:'.$sum.'<br>';}
}
$math = new Math();
$math->add(10,20);
$math->add(10,30,40);

PHP之常见的魔法方法相关推荐

  1. Python 中常见的魔法方法

    什么是Python魔法方法     魔法方法是在Python的类中被双下划线前后包围的方法,如常见的 :init.new.__del__等.这些方法在类或对象进行特定的操作时会自动被调用,我们可以使用 ...

  2. python中常见的魔法方法 magic method

    魔法方法 magic method(类中定义的双下方法) 魔法方法都是父类object有的,在python3中所有的类默认都会继承object.当我们对这个对象使用这些函数或者运算符时就会调用类中的对 ...

  3. 系统介绍python魔法方法

    目录 1.概念 2.魔法方法分类 3.构造与初始化 3.1 `__new__()` 3.2 `__init__()` 3.3 `__del__()` 4.类的表示 4.1 `__str__() / _ ...

  4. python深度讲解_《深度剖析CPython解释器》21. Python类机制的深度解析(第五部分): 全方位介绍Python中的魔法方法,一网打尽...

    楔子 下面我们来看一下Python中的魔法方法,我们知道Python将操作符都抽象成了一个魔法方法(magic method),实例对象进行操作时,实际上会调用魔法方法.也正因为如此,numpy才得以 ...

  5. 从零开始学Python编程之魔法方法

    大家好,我是岛上程序猿,欢迎关注! Python中的魔法方法是一种特殊方法,以双下划线开头和结尾,并且可以在类定义中定义,用于执行特定的操作.在本文中,我们将介绍魔法方法的作用.如何使用它们以及Pyt ...

  6. Python学习之魔法方法

    什么是魔法方法? 在Python中,有的方法的前后被双下划线所包围,这就是魔法方法,这些方法会在特殊的情况下被调用,而不用显示调用. 其中,Python中最常见的魔法方法便是构造方法_init_,同样 ...

  7. Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法

    Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...

  8. Python常见魔法方法详解

    目录 常用魔法方法 1. `__str__()` 2. `__del__()` 3. `__call__()` 4. `__new__()` 5. `__del__()` 6. `__init__() ...

  9. (十二)Python:常见魔法方法

    __new__(cls[, -]) 在第一次遇见__init__(self[,-])方法时我们会认为对象创建时第一个调用的方法就是它,其实不是.第一次调用的方法是__new__(cls[,-]).__ ...

最新文章

  1. Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)
  2. java编程实践开发项目,帮你突破瓶颈
  3. php 字节序,Linux_Linux中网络字节序和主机字节序,主机字节序就是我们平常说的 - phpStudy...
  4. 事务、事件(文件、时间、调度和执行)、复制、分片(范围、哈希)、简单的论坛系统分析
  5. 魅影远程监控(企业版)
  6. shields 徽标_徽标不够用时如何设计应用程序图标
  7. python生成泊松分布随机数_泊松分布随机数
  8. nginx基本原理介绍
  9. i710870h和i710875h有多大差距?哪个好?
  10. Java千百问_05面向对象(003)_java中抽象概念如何体现的
  11. Ubuntu 关闭 onboard (屏幕键盘应用)开机自启
  12. root工具android10,KingRoot安卓10root工具 5.4.0最新版
  13. 分页虚拟存储管理——页面置换算法例题
  14. 应用程序开发选择工具应注重运行效率还是易用性
  15. am57xx Damo根文件加载过程
  16. [译文]优雅的现代JavaScript设计模式: 冰冻工厂
  17. php中调整图片大小,php 调整图片尺寸的简单示例
  18. BackupManagerService分析 基于Android 8.0
  19. 靠肝的爬塔不优雅——养成手游《古今江湖》
  20. 【C#语言】具名类型和匿名类型

热门文章

  1. 第二次学习计划 之 蒙特卡罗树(MCTS)
  2. chrome顶部变黑_win10系统chrome内核浏览器地址栏变黑的解决方法
  3. openfire运行ant命令控制台中文乱码问题
  4. figure函数用法
  5. 物联网智慧养殖系统未来发展
  6. qq2007涂鸦表情破解(QQHelperDll.dll)
  7. linux ubuntu 分区,查看Ubuntu分区列表方法
  8. 智云SMOOTH-X2 云台的使用方法
  9. 盛迈坤电商:店铺运营具体需要怎么操作
  10. Salesforce 发送业务员未提交任务短信提醒经理