php中的常用魔术方法汇总

5年以前  |  阅读数:257 次  |  编程语言:PHP 

这篇文章详细的对php中的常用魔术方法进行了整理归纳,分享给大家供大家参考,具体内容如下

1、PHP把所有""开头的方法当做魔术方法,所以任何自定义的方法都不能是""开头
php提供的重载,是指动态的创建属性或方法。重载是通过魔术方法来实现的。这些魔术方法的参数不能饮用传递,get(),set(),isset(),unset(),实现类属性重载。
2、当访问类中不可访问的属性时,将调用get()方法
3、当访问类中不可访问的属性时,根据不同的情况会调用
get(),set(),isset(),unset(),其中当访问属性 时,使用函数isset()或empty()时,将调用isset()方法使用unset()函数时,将调用unset()方法。
4、这四个方法不能使用static关键词定义,在php5.3.0后,一个warning级别的警告将发生,当使用static方法定义这4个方法。
5、何谓不可访问的属性:(1)类中没有的属性,(2)私有变量在类外被访问。方法重载,通过
call()和callstatic()来实 现,两者的区别是一个上下文环境是否是静态方法,后者在调用不可访问的静态方法时会被调用。callstatic()是在php5.3.0中才被添 加。
6、sleep()和wakeup()
serialize()序列化时,会先检查是否存在sleep()函数,如果存在,则先调用sleep(),返回一个包含所有变量名称的数组,如果该方法不返回任何内容,则null被序列化,并产生一个notice级别的错误。
wakeup()方法和sleep()相反,在调用unserialize()时被调用
7、toString(),让一个类决定它如何转换成字符串,在php5.2.0之前,这个方法只能结合echo或print方法生效,php5.2.0之后,可以结合printf()修饰,但修饰的时候也不能用类似%d之类的非字符修饰符。
8、
invoke(),当尝试以调用函数的方式调用对象时,将出发这个函数,只在php5.3之后生效。
9、set_state()静态方法,当调用var_export()的时候,才会调用这个静态方法,php5.1.0之后生效。唯一参数是接收一个数组。
10、
construct()和destruct(),构造函数和析构函数,构造函数主要用于类的初始化,析构函数在某个对象的所有引用都 删除后或者对象被显示的销毁时运行。在析构函数中不允许抛出异常,否则会出发一个fatal error,析构函数在脚本结束时调用,此时所有的http header都已经发出.
11、
clone(),对象复制,此方法不能直接被调用,必须通过clone关键字显示调用

代码:


    //实例化对象时,会调用对象的__construct方法
    $obj = new Object();
    //给对象不存在的属性赋值时,会调用对象的__set方法
    $obj->title = "hello";
    //使用对象不存在的属性时,会调用对象的__get方法
    echo $obj->title;
    //调用对象不存在的方法时,会调用对象的__call方法
    $obj->test("hello",123,567);
    //调用不存在的类静态方法时,会调用类的__callStatic方法
    Object::staticMethod("static","not found method");
    //直接输出对象时,会调用对象的__toString方法
    echo $obj;
    //将一个对象当作函数一样使用时,会调用对象的__invoke方法
    echo $obj("test");
    //克隆对象时,会调用对象的__clone方法
    $obj2 = clone $obj;
    //判断对象属性是否存在时,会调用对象的__isset方法
    var_dump(isset($obj->aaa));
    //销毁对象属性时,会调用对象的__unset方法
    unset($obj->aaa);


    class Object{

      protected $array = array();

      function __construct()
      {
        echo __METHOD__."你正在实例化对象<br>";
      }

      function __set($name, $value)
      {
        $this->array[$name]=$value;
      }

      function __get($name)
      {
        return $this->array[$name];
      }

      function __call($name, $arguments)
      {
        var_dump($name,$arguments);
        return "magic function\n";
      }

      static function __callStatic($name, $arguments)
      {
        var_dump($name,$arguments);
        return "magic static function";
      }

      function __toString()
      {
        return __CLASS__.'<br>';
      }

      function __invoke($arguments)
      {
        var_dump($arguments);
        return __METHOD__.'<br>';
      }

      function __clone()
      {
        echo __METHOD__."你正在克隆对象<br>";
      }

      function __isset($name)
      {
        echo __METHOD__."你想判断有没有属性".$name."<br>";
        return 1;
      }

      function __unset($name)
      {
        echo __METHOD__."你想删除属性".$name."<br>";
      }


      function __destruct()
      {
        echo __METHOD__."你正在注销对象<br>";
      }



    }

以上就是关于php中的常用魔术方法的全部内容,希望对大家的学习有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例