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

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

  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

PHP:__get()、__set()、__isset()、__unset()、__call()、__callStatic()六个魔术方法的更多相关文章

  1. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toStr

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  2. PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  3. __get(),__set(),__isset(),__unset()

    __get(),__set(),__isset(),__unset() 在给不可访问属性赋值时,__set()会被调用读取不可访问属性的值时,__get()会被调用 当对不可访问属性调用isset() ...

  4. PHP中的魔术方法:__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload

    1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $ ...

  5. PHP中的魔术方法总结:__construct,__destruct ,__call,__callStatic,__get,__set,__isset, __unset ,__sleep,__wakeup,__toString,__set_state,__clone,__autoload

    1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $property, $value ...

  6. __get().__set.__isset,__unset魔术方法

    一般来说,总是把类的属性定义为 private .这更符合现实的逻辑. 但是对属性的读取和赋值操作非常频繁的,因此在PHP中,预定义了两魔术方法 "__get()"用来获取私有成员属性值的,只有一个参 ...

  7. php魔术方法__get(),__set(),__isset()的使用

    1.魔术方法__get(),__set(),__isset()类: <?php /** * @purpose: 魔术方法 __get() , __set(), __isset() 的使用 * U ...

  8. PHP十六个魔术方法

    PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct ...

  9. PHP之十六个魔术方法详细介绍

    PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用.这里进行详细介绍,感兴趣的小伙伴们可以参考一下. PHP中把以两个下划线__开头 ...

随机推荐

  1. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  2. spring boot 加载配置 文件

    在springboot启动的过程中,默契情况下会在classpath路径下加载application.properties当做系统配置文件,但有时候我们想要替换成另一个文件,可以 通过以下方式:   ...

  3. [Leetcode]015. 3Sum

    public class Solution { public List<List<Integer>> threeSum(int[] num) { Arrays.sort(num ...

  4. POJ-1128-Frame Stacking

    链接:https://vjudge.net/problem/POJ-1128 题意: 每张图片上面画了一些边框,给出这些边框叠在一起后的图片,图片边框一定是由一个字母表示并且每条边至少三个字符,输入保 ...

  5. xlrd和xlwd模块

    xlrd模块 是python中一个第三方的用于读取excle表格的模块 exlce结构分析 一个excle表格包含多个sheet 一个sheet中包含多行多列 每个单元格具备唯一的行号和列号 常用函数 ...

  6. 技巧:开启ubuntu系统桌面上的右键进入terminal命令行控制台功能

    $ sudo apt-get install nautilus-open-terminal 执行上述命令,重启. 重启命令: $ sudo reboot 注意:需要联网

  7. C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind

    由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...

  8. thinkphp模板布局

    不知道我们会不会有这样一个困惑,,每当进行一个项目时,发现页面都有好多重复的地方,假如我们每个页面都写,不仅降低的代码的运行效率 而且还不利于后期维护!TP中的模板布局就解决了这一难题! 我们就以Ad ...

  9. 关于element-ui表格样式设置的方法cell-class-name

    关于element-ui表格使用的一些方法 最近在用Vue.js和elment-ui做一个后台管理项目,不得不说element功能非常强大,提供了许多组件,基本可以满足一些基础的开发了.因为我做的后台 ...

  10. 14-----BBS论坛

    BBS论坛(十四) 14.1注册完成跳到上一个页面 (1)front/form.py # front/forms.py __author__ = 'derek' from ..forms import ...