zoukankan      html  css  js  c++  java
  • PHP:__get()、__set()、__isset()、__unset()、__call()、__callStatic()六个魔术方法

      哎呀呀,今天小仓鼠学到了魔术方法,简称魔法,哈哈哈哈,神经病啊~

      平时在面试的时候,也会遇到问魔术方法有哪些的问题哦!今天我们来了解一下下~

      1、__get()

      形式: __get($objName) {}

      作用:

      (1) 当实例化对象调用一个没有定义的属性时,会自动调用__get方法

        例子:

        结果:

      

      (2) 用来获取私有成员(private)和保护成员(protected)属性值

        例子:

        结果:

      

     

      2、__set()

      形式:__set($objName, $val ) {}

      作用:

      (1) 给未定义的属性赋值

        例子:

     

        结果:

      (2) 在类外对私有或受保护属性成员进行赋值时,会被自动调用

        例子:

      

        结果:

      

      3、__isset()

       形式:__isset($objValue) {}

        返回结果: 存在返回1,不存在不返回任何数据

         作用:

       (1) 对public权限的成员属性可以直接使用isset()函数检测值是否被设定

         例子:

      

        结果:

     

      (2) 对于设置为 private 或 protected 的成员属性则不行,需要在类里面加上一个 __isset() 方法

        例子:

         结果:

      4、__unset()

         形式:__unset($objValue)

        作用:

      (1) 对public权限的成员属性可以直接使用unset()函数销毁释放内存

          例子:

        结果: 报此错表明了销毁成功

      

      (2) 设置为 private 或 protected 的成员属性则不行,需要在类里面加上一个 __unset() 方法

         例子:

        结果:

     

      5、__call()

      形式:__call($name, $argument) {}

      作用:

      (1) 对象调用未定义的函数时,会自动调用

        例子:

      

        结果:

     

      

      (2) 调用Private或protected的方法时,会自动调用

        例子:

      

        结果:

       6、__callStatic()

      形式:__callStatic($name, $argument) {}

      注意:该方法必须是静态的才可以哦,否则会报错

      自动调用场景:

      (1) 对象调用未定义的静态函数时,会自动调用

        例子:

      

         结果:

      (2) 调用Private或protected的静态方法时,会自动调用

         例子:

        结果:

      

      总结:

      1、 对未定义的属性进行自动调用的魔术方法有:

        (1) __get($objName) : 当调用未定义属性时,自动调用

        (2)__set($objName)  : 当对未定义属性进行赋值时,自动调用

      2、 对未定义的方法进行自动调用的魔术方法有:

        (1) __call($name, $argument)     : 当调用未定义函数时,自动调用

        (2) __callStatic($name, $argument) : 当调用未定义静态函数时,自动调用

      3、对原属性进行操作的魔术方法有:

        (1) __isset($objValue) : 检测属性是否存在

        (2) __unset($objValue) :将属性进行销毁

      4、调用private(私有的)或protected(受保护)的属性或方法时,各个魔术方法的调用场景:

        (1)  __get($objName))         : 在类外调用私有和受保护属性时,自动调用

        (2) __set($objName))          : 在类外赋值私有和受保护属性时,自动调用

        (3) __call($name, $argument))     : 在类外调用私有和受保护方法时,自动调用

        (4) __callStatic($name, $argument)) :  在类外调用静态私有和受保护方法时,自动调用

        (5)  __isset($objValue)          : 在类外检测私有和受保护属性时,自动调用

        (6)  __unset($objValue)           : 在类外销毁私有和受保护属性时,自动调用

      以上

      END

  • 相关阅读:
    easyui属性表格的一点小总结
    我是程序员:国庆带女朋友回家见父母
    我睁着朦胧呆滞的双眼立在初秋的夜里
    iframe父子兄弟之间调用传值(contentWindow && parent)
    向前兼容和向后兼容的含义
    char 与 String 相等比较
    2012国庆12天的长假
    JavaScript遍历XML总结
    Spring3.x企业应用开发实战Spring+Hibernat架构分析
    w3school上系统过了一遍Jquery的总结
  • 原文地址:https://www.cnblogs.com/finalanddistance/p/9324177.html
Copyright © 2011-2022 走看看