魔术方法是以两个下划线 '__' 开头,具有特殊作用的一些方法,可以看做 PHP 的 “语法糖”。

语法糖:指那些没有个计算机语言添加新功能,而只是对人类来说更 “甜蜜” 的语法,语法糖往往给程序员提供了更实用的编码方式或者一些技巧的用法,有益于更好的编码风格,是代码更易读。不过其并没有给语言添加什么新东西。PHP 里的引用、SPL 等都属于语法糖。

PHP中的魔术方法常用的有 __set()、__get()、__call()、__callStatic()、__toString()、__construct()、__destruct()。

若在类中定义了 __set()、__get() 这一对魔术方法,那么当给对象属性赋值或者取值时,即使这个属性不存在,也不会报错,一定程度上增强了程序的健壮性。

当调用一个不可访问的方法(如未定义,或者不可见)时,__call() 会被调用。跟 __call() 方法配套的魔术方法是 __callStatic() 。当然,使用魔术方法 “ 防止调用不存在的方法而报错 ”,并不是魔术方法的本意。实际上,魔术方法是方法的动态穿件变为可能,这在 MVC 等框架设计中是很有用的语法。假设一个控制器调用了不存在的方法,那么只要定义了 __call() 魔术方法,就能友好的处理这种情况。通常 __callStatic() 也可用于 ORM 中实现动态创建和延迟绑定。

再看另外一个魔术方法 __toString 用于打印一个对象时,看看这个对象都有哪些属性,其值是什么,如果定义了 __toSting() 方法,就能在测试时打印出对象体,对象就会自动调用它所属类定义的 __toString 方法,也可以自己定制,更易于理解。

为什么直接 echo 输出一个对象就会报语法错误,而如果这个对象实现 __toString() 方法后就可以直接输出呢?原因很简单,echo 本来就可以打印一个对象,而且也实现了这个借口,但是 PHP 对其做了个限制,只有实现 __toString() 后才云讯使用,这个从 php 的源代码里可以得到验证,由此可见,魔术方法并不神奇。

只是在实际开发中,魔术方法就经常用到了。

php中魔术方法的应用相关推荐

  1. PHP中魔术方法的用法

    PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...

  2. php中魔术方法详解

    〝 古人学问遗无力,少壮功夫老始成 〞php中魔术方法详解,在php中有一类方法,很奇怪常,那就是只要满足一定条件,就会自己执行,那就是php中的魔术方法,码字不易,出精品更难,没有特别幸运,那么请先 ...

  3. php5中魔术方法函数有哪几个,php中的类魔术方法有哪些

    php中的类魔术方法有:1.__sleep,返回一个包含对象中所有应被序列化的变量名称的数组:2.__tostring,返回一个类被当作字符串时要输出的内容:3.__construct,构造方法:4. ...

  4. php魔术方法例子,PHP中魔术方法的使用举例

    本文小编将就PHP中的魔术方法的使用做简要叙述附带代码,感兴趣的小伙伴可以看看! 什么是"魔术方法"? 在PHP中以两个下划线开头的方法,__construct(), __dest ...

  5. php5的魔术方法,php5中魔术方法学习笔记

    1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. PHP实例代码如下: classTest {function__construct() {echo"b ...

  6. python魔术方法大全_python中魔术方法和属性汇总

    类定义后,便在内存中开辟空间存储类属性和所有的方法,其中类属性是以字典的形式进行存储.当实例化一个类时,即另开辟空间存储成员变量,以及定义变量__class__指向类的存储空间.对象中的私有变量也是可 ...

  7. 以下不属于PHP的魔术方法是,PHP中魔术方法的作用是什么?

    其实还是为了更好的支持面向对象,下面是一个例子... class Tools { /** * 利用魔术方法__call实现伪重载... * @return [type] [description] * ...

  8. python 析构函数_常用的python类的魔术方法

    对于很少使用python编写大型代码的朋友可能会忘记python还是一种面向对象的语言.在其他面向对象的语言中有构造函数.析构函数等等在生命周期不同时机自动调用的函数,python当然也是有的.除此之 ...

  9. 15个魔术方法的总结

    PHP5中魔术方法函数有哪几个,请举例说明各自的用法 __wakeup   __construct, __destruct __call,__get, __set, __isset, __unset ...

最新文章

  1. 万众瞩目,2018中国企业数字化转型国际峰会,重磅来袭
  2. rgbdslam_v2安装并使用
  3. redis有序集合(Zset)
  4. POJ 3265 DP
  5. Java学习笔记_类和对象
  6. 类和对象运行时在内存里是怎么样的?各种变量、方法在运行时是怎么交互的?
  7. java 存储数据到文件中_本机速度文件支持的“纯” Java大数据存储
  8. 可靠型园区网组网,用VRRP还是堆叠?
  9. Pytorch使用记录
  10. FLEX APIs、Libs、Components
  11. 关于抢红包的_关于抢红包现象的材料作文
  12. 探讨破解3G今日困局之策
  13. 硬盘突然变raw格式_移动硬盘分区变为RAW格式的终极解决办法
  14. 网易微专业——Java Web开发工程师学习笔记(1):HTTP
  15. 数字电路——流水灯(二)_往返流水灯
  16. js正则之前瞻后顾与非捕获分组
  17. 对webkit-font-smoothing和-moz-osx-font-smoothing的理解
  18. 用ps做个一寸的照片
  19. iOS drawRect 和 awakeFromNib
  20. MySQL 02 初体验

热门文章

  1. 默认构造函数和拷贝构造函数
  2. JavaScript可否多线程? 深入理解JavaScript定时机制
  3. 解析IOS控制台利用GDB命令查看报错堆栈
  4. Keil C51,内存与指针
  5. .NET(C#)连接各类数据库
  6. IOS开发基础之UI的喜马拉雅的项目-10
  7. 计算机的三个基本功能,操作系统的三个作用是什么
  8. 报头中的偏移量作用_C语言中函数的实现
  9. 室内装修隐蔽工程验收知识拓展_装修之前先看知贤,『装修微课堂』室内装修隐蔽工程详解,装修小白防坑避雷手册!...
  10. 深度有趣 | 30 快速图像风格迁移