php中魔术方法的应用
魔术方法是以两个下划线 '__' 开头,具有特殊作用的一些方法,可以看做 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中魔术方法的应用相关推荐
- PHP中魔术方法的用法
PHP中魔术方法的用法 /** PHP把所有以__(两个下划线)开头的类方法当成魔术方法.所以你定义自己的类方法时,不要以 __为前缀. * */// __toString.__set.__get__ ...
- php中魔术方法详解
〝 古人学问遗无力,少壮功夫老始成 〞php中魔术方法详解,在php中有一类方法,很奇怪常,那就是只要满足一定条件,就会自己执行,那就是php中的魔术方法,码字不易,出精品更难,没有特别幸运,那么请先 ...
- php5中魔术方法函数有哪几个,php中的类魔术方法有哪些
php中的类魔术方法有:1.__sleep,返回一个包含对象中所有应被序列化的变量名称的数组:2.__tostring,返回一个类被当作字符串时要输出的内容:3.__construct,构造方法:4. ...
- php魔术方法例子,PHP中魔术方法的使用举例
本文小编将就PHP中的魔术方法的使用做简要叙述附带代码,感兴趣的小伙伴可以看看! 什么是"魔术方法"? 在PHP中以两个下划线开头的方法,__construct(), __dest ...
- php5的魔术方法,php5中魔术方法学习笔记
1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. PHP实例代码如下: classTest {function__construct() {echo"b ...
- python魔术方法大全_python中魔术方法和属性汇总
类定义后,便在内存中开辟空间存储类属性和所有的方法,其中类属性是以字典的形式进行存储.当实例化一个类时,即另开辟空间存储成员变量,以及定义变量__class__指向类的存储空间.对象中的私有变量也是可 ...
- 以下不属于PHP的魔术方法是,PHP中魔术方法的作用是什么?
其实还是为了更好的支持面向对象,下面是一个例子... class Tools { /** * 利用魔术方法__call实现伪重载... * @return [type] [description] * ...
- python 析构函数_常用的python类的魔术方法
对于很少使用python编写大型代码的朋友可能会忘记python还是一种面向对象的语言.在其他面向对象的语言中有构造函数.析构函数等等在生命周期不同时机自动调用的函数,python当然也是有的.除此之 ...
- 15个魔术方法的总结
PHP5中魔术方法函数有哪几个,请举例说明各自的用法 __wakeup __construct, __destruct __call,__get, __set, __isset, __unset ...
最新文章
- 万众瞩目,2018中国企业数字化转型国际峰会,重磅来袭
- rgbdslam_v2安装并使用
- redis有序集合(Zset)
- POJ 3265 DP
- Java学习笔记_类和对象
- 类和对象运行时在内存里是怎么样的?各种变量、方法在运行时是怎么交互的?
- java 存储数据到文件中_本机速度文件支持的“纯” Java大数据存储
- 可靠型园区网组网,用VRRP还是堆叠?
- Pytorch使用记录
- FLEX APIs、Libs、Components
- 关于抢红包的_关于抢红包现象的材料作文
- 探讨破解3G今日困局之策
- 硬盘突然变raw格式_移动硬盘分区变为RAW格式的终极解决办法
- 网易微专业——Java Web开发工程师学习笔记(1):HTTP
- 数字电路——流水灯(二)_往返流水灯
- js正则之前瞻后顾与非捕获分组
- 对webkit-font-smoothing和-moz-osx-font-smoothing的理解
- 用ps做个一寸的照片
- iOS drawRect 和 awakeFromNib
- MySQL 02 初体验
热门文章
- 默认构造函数和拷贝构造函数
- JavaScript可否多线程? 深入理解JavaScript定时机制
- 解析IOS控制台利用GDB命令查看报错堆栈
- Keil C51,内存与指针
- .NET(C#)连接各类数据库
- IOS开发基础之UI的喜马拉雅的项目-10
- 计算机的三个基本功能,操作系统的三个作用是什么
- 报头中的偏移量作用_C语言中函数的实现
- 室内装修隐蔽工程验收知识拓展_装修之前先看知贤,『装修微课堂』室内装修隐蔽工程详解,装修小白防坑避雷手册!...
- 深度有趣 | 30 快速图像风格迁移