首页 » PHP教程 » 驼峰命php技巧_PHP的那些魔术方法二

驼峰命php技巧_PHP的那些魔术方法二

访客 2024-12-03 0

扫一扫用手机浏览

文章目录 [+]

__sleep()与__wakeup()

字面上的意思很好玩,睡觉和起床。
它们分别对应着serialize()和unserialize()方法,也便是序列化和反序列化时会触发这两个魔术方法。

驼峰命php技巧_PHP的那些魔术方法二 驼峰命php技巧_PHP的那些魔术方法二 PHP教程

这里须要把稳的是,__sleep()须要返回一个数组,而这个数组对应着类中的属性名。
常日来说,它们可以在序列化提高行数据清理事情,或者反序列化提高行数据的预处理事情。
比如序列化前关闭数据库连接或者反序列化前打开数据库连接。

驼峰命php技巧_PHP的那些魔术方法二 驼峰命php技巧_PHP的那些魔术方法二 PHP教程
(图片来自网络侵删)

publicfunction__sleep(){echo'===sleep==='.PHP_EOL;echo'调用serialize()时来找我,先睡一会的'.PHP_EOL;echo'===unset==='.PHP_EOL;return['a'];}publicfunction__wakeup(){echo'===wakeup==='.PHP_EOL;echo'调用unserialize()时来找我,起床吧'.PHP_EOL;echo'===wakeup==='.PHP_EOL;}

__toString()

顾名思义,这个方法通过返回一个字符串,实现工具的打印。
如果没有实现这个方法,我们直策应用echo是无法打印工具的,会报错。
当实现了这个魔术方法后,直策应用echo或者print等方法就可以进入这个魔术方法中,并打印出该方法中返回的内容。

publicfunction__toString(){echo'===toString==='.PHP_EOL;echo'调用echo、print时会利用我'.PHP_EOL;echo'===toString==='.PHP_EOL;return'打印出来看看吧';}

当然,它也能实现工具转换到字符串,如在字符串拼接的时候,如:$obj = new Object(); $a = 'this is ' . $obj;这样利用。

__invoke()

很故意思的一个魔术方法,它的浸染是将工具当做方法利用时会调用这个魔术方法。
什么意思呢?比如:\$obj = new Object();,然后直接$obj();

这时,就会进入这个魔术方法。
那么有什么用呢?对付闭包以及反射来说,这个魔术方法有不可替代的浸染。
将来我们会在别的文章中进行详细解释。

publicfunction__invoke(){echo'===invoke==='.PHP_EOL;echo'把类当方法利用时就进这里了'.PHP_EOL;echo'===invoke==='.PHP_EOL;}

__clone()

利用clone关键字进行工具的复制时,就会调用这个魔术方法。
实在便是 原型模式 的实现。
在原型模式的干系文章中我们再来详细解释。

publicfunction__clone(){echo'===clone==='.PHP_EOL;echo'复制类的时候我就发挥浸染了'.PHP_EOL;echo'===clone==='.PHP_EOL;}

__set_state()与__debugInfo()

真的是神奇的PHP语法,末了这两个魔术方法一个是用的下划线命名,一个是用的小驼峰。
实在无力吐槽~~

这两个方法对应的是var_export()和var_dump()方法在利用时的调用。
一样平常是在调试时利用,实在非常类似于__toString()方法。

publicstaticfunction__set_state($an_array){echo'===set_state==='.PHP_EOL;echo'利用var_export()的时候利用调用我哦'.PHP_EOL;echo'===set_state==='.PHP_EOL;$m=newPHPMagic();$m->var1=111;$m->var2=222;return$m;}publicfunction__debugInfo(){echo'===debugInfo==='.PHP_EOL;echo'利用var_dump()的时候便是我来啦'.PHP_EOL;echo'===debugInfo==='.PHP_EOL;return['var1'=>$this->var1,'var2'=>$this->var2,];}

通过两篇文章,我们熟习了PHP所定义的这些魔术方法。
在这里须要特殊把稳的是,PHP中将所有以__两个下划线开头的方法做为魔术方法的保留命名。
以是在定义类方法的时候,不要利用两个下划线开头的方法名。

文档参考:https://www.php.net/manual/zh/language.oop5.magic.php

完全代码:https://github.com/zhangyue0503/php/blob/master/newblog/PHPMagic.php

标签:

相关文章

东直门,传承千年古韵,绽放时代风采

东直门,这座历经千年风雨的古老城门,见证了北京城的沧桑巨变。如今,它不仅承载着厚重的历史文化底蕴,更在新时代焕发出新的生机与活力。...

PHP教程 2024-12-05 阅读0 评论0