php类知识---最疯狂的魔术方法serialize,_sleep,__wakeup,unserialize,__autoload,__clone

  • 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(‘陈培昌‘,22,[‘散打‘,‘泰拳‘, ‘巴西柔术‘]);
$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:"巴西柔术";}}
 
  • __sleep 调用serialize时触发
  • unserialize-----把文件中的记录还原为类的实例对象
  • __wakeup------执行unserialize时调用
  • clone复制对象属性
  • __clone可以限制哪些属性可以复制,哪些属性采用自定义
  • __autoload 唯一在类定义体外使用的方法

原文地址:https://www.cnblogs.com/saintdingspage/p/10960865.html

时间: 2024-11-13 10:16:45

php类知识---最疯狂的魔术方法serialize,_sleep,__wakeup,unserialize,__autoload,__clone的相关文章

魔术方法__sleep 和 __wakeup

感觉序列化和反序列化用得倒是比较少了,而json_encode和json_decode用得相对多,都是转化成串,进行入库.传输等.json更方便,但是序列化和反序列化结合这两个魔术方法使用倒还行<?php /** * 魔术方法__sleep() 和 __wakeup() * __sleep(): serialize()序列化之前调用,返回一个需要保存变量名数组.一般用来保存部分属性,节省空间 * __wakeup():unserialize() 反序列化之前调用,无返回值,一般进行一个动作 */

php魔术方法__sleep() 和 __wakeup()

魔术方法的使用 <?php class Connection  {     protected $link;     private $server, $username, $password, $db;          public function __construct($server, $username, $password, $db)     {         $this->server = $server;         $this->username = $user

PHP 中 16 个魔术方法详解

前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用 __callStatic(),用静态方式中调用一个不可访问方法时调用 __get(),获得一个类的成员变量时调用 __set(),设置一个类的成员变量时调用 __isset(),当对不可访问属性调用isset()或emp

魔术方法

特点: 以--(两个下划线)开头的类方法,会自动被调用. 常见的魔术方法有15个: __set(变量名称,变量值)(不需要有返回值):在给不可访问属性赋值时,__set() 会被调用. 标准形式不能改: 需要设置值和值的类的属性名称, 魔术方法必须是公共的(Public),且不能定义为静态的(static).被访问的属性名称,必须是字符串.当在类的外部调用不能直接访问不能直接访问的属性时,该函数会自动被调用. property_exists(字符串形式的类名或要检查的对象,属性名字)- 检查对象

前端学PHP之面向对象系列第二篇——魔术方法

显示目录 目录 [1]构造方法 [2]析构方法 [3]不可访问属性[4]对象复制[5]字符串[6]对象不存在[7]自动加载类[8]串行化[9]函数调用 前面的话 php在面向对象部分有很多相关的魔术方法,这些方法为面向对象实现提供了便利,本文将详细介绍魔术方法 构造方法 大多数类都有一种称为构造函数的特殊方法.当创建一个对象时,它将自动调用构造函数,通常用它执行一些有用的初始化任务 构造函数的声明与其它操作的声明一样,只是其名称必须是两个下划线__construct( ).这是PHP5中的变化:

PHP 对象 魔术方法

<?php header('content-type:text/html;charset=utf-8'); /*  * __construct()构造方法  * 在对象初始化时自动调用  * __destruct()析构方法  * 在对象释放资源时自动调用  * __get()取值  * 在取私有属性值时自动调用  * __set()设置值  * 在设置私有属性值自动调用  * __isset()判断值  * 在使用isset()判断私有属性是否存在时自动调用  * __unset()释放值  

魔术方法__clone(), __toString(), __call(), __autoload(), __sleep()和__wakeup()详解

一.魔术方法__clone() <?php class demo{ public $name; public $age; public function __construct($name,$age){ $this -> name = $name; $this -> age = $age; } public function say(){ echo "say".$this->name; } //在克隆对象时自动调用 //作用:可以对新对象的成员属性进行赋值 pu

PHP面向对象常见的关键字和魔术方法

在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对象的应用能力,例如__call().__toString().__autoload等. ①final关键字的应用 final关键字的作用如下:a.实用final标识的类,不能被继承.b.在类中使用final标识的成员方法,在子类中不能被覆盖. 在下面的例子中声明一个MyClass类,并使用final

php中的常用魔术方法总结

以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring ()  __Call()  __autoLoad()  __ clone()  __GET()   __SET()    __isset()  __unset() 1.__Tostring()   用于定义输出对象引用时调用  常用于打印一些对象的信息 必须有返回值eg:有一个persion类Persion per =new persion()Echo per;    //直接调