huangxuegang

你要悄悄学php,然后惊艳所有人
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

php魔术方法

Posted on 2019-04-24 18:55  一花多叶无菩提  阅读(149)  评论(0)    收藏  举报
  • __construct(),类的构造函数
  • __destruct(),类的析构函数
  • __call(),在对象中调用一个不可访问方法时调用
  • __callStatic(),用静态方式中调用一个不可访问方法时调用
  • __get(),获得一个类的成员变量时调用
  • __set(),设置一个类的成员变量时调用
  • __isset(),当对不可访问属性调用isset()或empty()时调用
  • __unset(),当对不可访问属性调用unset()时被调用。
  • __sleep(),执行serialize()时,先会调用这个函数
  • __wakeup(),执行unserialize()时,先会调用这个函数
  • __toString(),类被当成字符串时的回应方法
  • __invoke(),调用函数的方式调用一个对象时的回应方法
  • __set_state(),调用var_export()导出类时,此静态方法会被调用。
  • __clone(),当对象复制完成时调用
  • __autoload(),尝试加载未定义的类
  • __debugInfo(),打印所需调试信息
  • test.php
  • <?php 
    include "Magic.php";
    $obj=new Magic();
    $obj->name="调用set方法";
    $obj->name;
    isset($obj->aa);
    empty($obj->bb);
    unset($obj->cc);
    $se=serialize(array("周","满","和","个人","博客","www.jb51.net","周满和","个人博客"));
    var_dump($se);
    echo  "<br/>";
    var_dump(unserialize($se));
    echo  "<br/>";
    echo "$obj"."<br/>";
    $obj1=clone($obj);
    //以函数的方式调用对象
    $obj();
    $obj->aaa(1,2);
    //尝试加载未定义的类
     ?>

    Magic.php

  • <?php 
    /**
    **魔术方法总结
    ***/
    /**
    * 
    */
    class Magic 
    {
        private $name=null;
        //构造方法:在构建对象的时候被使用
        public function __construct()
        {
            echo "调用构造方法"."<br/>";
            
        }
        //析构方法:对象别销毁或者脚本结束时候调用
        public function __destruct(){
            echo "对象被销毁"."<br/>";
    
        }
        //当给不可访问或不存在属性赋值时被调用
        //第一个参数为要赋值的变量
        //第二个参数为要赋的值
        public function __set($name,$value){
            $this->$name=$value;
            echo $name.'<br/>';
    
        }
        //读取不可访问或不存在属性时被调用
        //参数为一个不存在的属性值
        public function __get($name){
            $name=$this->name;
            echo $name."<br/>";
    
        }
        //对不可访问或不存在的属性调用isset()或empty()时被调用
        //参数为一个不存在的属性值
        public function __isset($name){
            $name="使用isset或者empty调用了不可以或者不存在的属性";
            echo $name.'<br/>';
        }
        //对不存在或不可以访问的属性进行unsert操作
        public function __unset($name){
            $name="unset一个不存在或不可以访问的属性";
            echo $name.'<br/>';
        }
        //serialize(序列化)时被调用,当你不需要保存大对象的所有数据时很有用
        public function __sleep(){;
            
        }
        //unserialize(反序列化)时被调用,可用于做些对象的初始化操作
        public function __wakeup(){
    
        }
        //当一个类被转换成字符串的时候调用
        public function __toString(){
            return  "类被转换成了字符串";
        }
        //进行对象克隆的时候调用
        public function __clone(){
            echo "克隆了一个对象"."<br/>";
    
        }
        //当以函数的方式调用对象的时候
        public function __invoke()
        {
              echo "以函数的方式调用对象"."<br/>";
        }
        //在对象中调用一个不可访问方法时调用
        //第一个参数为方法名称
        //第二个参数为参数,以数组的方式传递
        public function __call($funcName,$array){
                var_dump($funcName);
                var_dump($array);  
        }   
        // static function autoload($className){
        //     ECHO  $className;DIE;
        // }
    }
    // //实现一个自动加载
    // spl_autoload_register(array('Magic', 'autoload')); 
    // new Bb();
     ?>

    Bb.php

  • <?php 
    /**
    * Bb类
    */
    class Bb
    {
        function __construct()
        {
            ehco "这是一个B类";
        }
    }
     ?>