php中对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(): 当对象反序列化时自动调用, 作用: 给新产生的对象赋初值

 

以上是关于php中对象的主要内容,如果未能解决你的问题,请参考以下文章

超级有用的9个PHP代码片段

PHP必用代码片段

PHP 代码片段

php 在Yoast SEO中更改或删除OpenGraph输出的代码片段。此代码中有多个代码段。

PHP代码-psysh调试代码片段工具

超实用的php代码片段