zoukankan      html  css  js  c++  java
  • 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(): 当对象反序列化时自动调用, 作用: 给新产生的对象赋初值
  • 相关阅读:
    Max Sum Plus Plus HDU
    Monkey and Banana HDU
    Ignatius and the Princess IV HDU
    Extended Traffic LightOJ
    Tram POJ
    Common Subsequence HDU
    最大连续子序列 HDU
    Max Sum HDU
    畅通工程再续
    River Hopscotch POJ
  • 原文地址:https://www.cnblogs.com/HRurl/p/7751539.html
Copyright © 2011-2022 走看看