• php中对象


    clone 和   __clone】
         1、对象是引用数据类型: 
                 当使用   = 将一个对象赋值给另一个对象时, 赋的是对象的地址, 两个变量指向同一地址, 一个跟着另一个也跟着变
            $lisi = $zhangsan;
          
         2、clone: 
                如果想要将一个对象完全克隆出一个互不干扰的对象, 需要使用clone关键字
            $lisi = clone $zhangsan;
          
         3、__clone(): 
           ① 当使用clone关键字克隆对象时, 将自动调用魔术方法
           ② __clone()函数, 相当于克隆对象时的构造函数, 用于给新克隆对象赋初值
           ③ 在clone()函数中, $this 指向的是新克隆出的对象
          
          
        【__toString()】  
          当使用  echo 等输出语句时, 直接打印对象时, 将调用__toString()方法, 打印方法返回的 字符串内容
          function __toString(){
                return "[name:{$this->name},age:{$this->age}]";//数组格式          [name:zhangsan,age:14]
                //return "{name:{$this->name},age:{$this->age}}";//对象格式      {name:zhangsan,age:14}
          }
          echo $zhangsan;//echo 只能打印字符串
          
          
        【__call()】 
          调用类中未公开或者未定义的方法时, 将自动执行__call() 方法
          自动调用时, 将给 __call()方法传递两个参数:
         ① 调用的方法名
         ②调用方法时传递的参数, 数组格式
          
        【__autoload()】
         ① 这是唯一一个不需要在类中调用的模式方法
         ② 当实例化一个不存在的类时, 将自动调用这个魔术方法
         ③ 调用方法时, 将自动给__autoload()传递一个参数, 表示实例化的类名
            
                所以, 可以根据类名, 自动导入对应的类文件(类名命名必须规范)
           function __autoload($class){
               include "class/".strtolower($class).".class.php";
           }
           $zhangsan = new Person();//本文件中没有Person类, 将自动执行__autoload()
                并加载"class/person.class.php"
          
          
        【对象的串行化与反串行化(序列化与反序列化)】
         1、   串行化: 将对象通过一系列操作, 转化为一个字符串
         2、反串行化: 将串行化以后的字符串, 重新转化为对象
         
         3、什么时候使用串行化:
           ① 当对象需要在网络中传输的时候
           ② 当对象需要持久化保存在文件或数据库中的时候 
         
         4、如何进行对象的串行化与反串行化 
           ①  串行化: $str = serialize($zhangsan);
           ② 反串行化: $obj = unserialize($str);
          
         5、__sleep()魔术方法:
          ① 当执行对象串行化时, 会自动执行__sleep()方法
          ② __sleep()方法要求返回一个数组, 数组中的值就是可以串行化的属性, 不在数组中的值, 将不能串行化
            function __sleep(){
                return ["name"]; // 只有name属性, 可以进行串行化
            }
          
         6、__wakeup()魔术方法:
          ① 当执行对象反串行化时, 自动执行
          ② 自动调用时, 用于给反串行化新产生的对象赋默认值
            function __wakeup(){
                $this->name = "lisi"; //$this 指向反串行化新产生的对象
            }
        
         【json_encode 和   json_decode 对数组和对象进行串行化】
          1、json_encode: 将对象和数组, 串行化为一个JSON字符串
             $str = json_encode($arr);
          
          2、json_decode: 将JSON字符串, 反串行化为对象或数组
                  第一个参数: 为JSON字符串
                  第二个参数: 为true 或 false, true表示转为数组, false 表示转为对象(默认)
            $obj = json_decode($str);
            $arr = json_decode($str,true);
          
          
         【类型约束】
          1、类型约束: 在变量前加上数据类型, 用于约束变量只能存放对应数据类型的值(这种操作子强类型语言中非常常见, 在PHP中, 
                                       只能实现数组和对象(属于符合类型)的约束, 不能约束标量和特殊类型)
          
          2、在PHP 中, 类型约束, 只能发生在函数的形参中, 声明普通的变量, 不能进行类型约束 
            function func(array $arr){}  √
            array $arr = [];             ×
          
          3、如果类型约束为一个类, 则本类或者子类的所有对象, 都可通过约束
            class Person{}
            class Student extends Person{}
            function func(Person $num){}
            func(new Person());   √
            func(new Student());  √
            func("1111");         ×
         
          
         【魔术方法小总结】
         1、__construct(): 构造函数, new一个对象时, 自动调用, 用于给对象赋初值 
         2、__destruct() : 析构函数, 当    一个对象被销毁时, 自动调用
         3、__set(): 当    给对象的非公开属性赋值时, 自动调用; 参数: 属性名, 属性值
         4、__get(): 当读取对象的非公开属性赋值时, 自动调用; 参数: 属性名;  返回值: $this->属性名;
         5、__isset(): 当使用__isset()检测对象私有属性时, 自动调用; 参数: 属性名;   返回值: isset($this->属性名);
         6、__unset(): 当使用__unset()删除对象私有属性时, 自动调用; 参数: 属性名;   在方法中执行unset($this->属性名);
         7、__clone(): 当使用clone关键字克隆对象时, 自动调用; 用于给新客隆对象赋初值
         8、__toString(): 当使用echo语句打印对象时, 自动调用; 返回值: 需要打印的内容
         9、__call(): 当执行对象中非公开的方法时, 自动调用; 参数: 调用的方法名, 数组格式的参数列表, 返回值随意
         10、__autoload(): 唯一一个在类外使用的魔术方法, 当实例化一个没有生命的类时自动调用。 参数: 实例化的类名
                           作用: 在函数中include对应的类文件
         11、__sleep(): 当对象序列化时自动调用, 返回值: 数组格式, 表示能够序列化的属性名
         12、__wakeup(): 当对象反序列化时自动调用, 作用: 给新产生的对象赋初值
  • 相关阅读:
    POJ 1988 Cube Stacking(带权并查集)
    POJ 1414 Life Line(搜索)
    POJ 3468 A Simple Problem with Integers (线段树多点更新模板)
    二叉树前序遍历+中序遍历->后序遍历
    POJ 1061 青蛙的约会(扩展欧几里得)
    XDOJ 1020 ACMer去刷题吧(基础dp)
    POJ 2823 Sliding Window (线段树区间查询)
    线段树学习(一)
    UVA 294 Divisors( 因子分解)
    YYN图论学习路线(推荐)
  • 原文地址:https://www.cnblogs.com/HRurl/p/7751539.html
Copyright © 2020-2023  润新知