PHP魔术方法什么时候用,具体用法是怎样
Admin 2022-08-15 群英技术资讯 881 次浏览
今天这篇给大家分享的知识是“PHP魔术方法什么时候用,具体用法是怎样”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“PHP魔术方法什么时候用,具体用法是怎样”文章能帮助大家解决问题。魔术方法是PHP面向对象中特有的特性。它们在特定的情况下被触发,都是以双下划线开头,你可以把它们理解为钩子,利用模式方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法)。魔术方法很多还是成对出现的,以下列出目前PHP中所有的模式方法。
1.__construct,__destruct
__constuct构建对象的时被调用;
__destruct明确销毁对象或脚本结束时被调用;
2.__get,__set
__set当给不可访问或不存在属性赋值时被调用
__get读取不可访问或不存在属性时被调用
3.__isset,__unset
__isset对不可访问或不存在的属性调用isset()或empty()时被调用
__unset对不可访问或不存在的属性进行unset时被调用
4.__call,__callStatic
__call调用不可访问或不存在的方法时被调用
__callStatic调用不可访问或不存在的静态方法时被调用
5.__sleep,__wakeup
__sleep当使用serialize时被调用,当你不需要保存大对象的所有数据时很有用
__wakeup当使用unserialize时被调用,可用于做些对象的初始化操作
6.__clone
进行对象clone时被调用,用来调整对象的克隆行为
7.__toString
当一个类被转换成字符串时被调用
8.__invoke
当以函数方式调用对象时被调用
9.__set_state
当调用var_export()导出类时,此静态方法被调用。用__set_state的返回值做为var_export的返回值。
10.__debuginfo
当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本
PHP魔术方法使用实例如下:
1 <?php 2 3 class Magic 4 { 5 public $var = 'test'; 6 7 //构造函数,在创建对象的时候调用 8 public function __construct() 9 { 10 echo '__construct called'.PHP_EOL; 11 } 12 13 //某个对象的引用都被删除、对象被销毁、调用exit()后、脚本关闭时被调用 14 public function __destruct() 15 { 16 echo '__destruct called'.PHP_EOL; 17 } 18 19 //当给不可访问或不存在属性赋值时被调用 20 public function __set($name, $value) 21 { 22 echo $name.'-'.$value; 23 echo '__set called'.PHP_EOL; 24 } 25 26 //读取不可访问或不存在属性时被调用 27 public function __get($name) 28 { 29 echo $name; 30 echo '__get called'.PHP_EOL; 31 } 32 33 //调用不可访问或不存在的方法时被调用 34 public function __call($name, $arguments) 35 { 36 echo $name . '-' . implode(',', $arguments); 37 echo '__call called'.PHP_EOL; 38 } 39 40 //调用不可访问或不存在的静态方法时被调用 41 public static function __callStatic($name, $arguments) 42 { 43 echo $name . '-' . implode(',', $arguments); 44 echo '__callStatic called'.PHP_EOL; 45 } 46 47 //对不可访问或不存在的属性调用isset()或empty()时被调用 48 public function __isset($name) 49 { 50 echo $name; 51 echo '__isset called'.PHP_EOL; 52 return true; 53 } 54 55 //对不可访问或不存在的属性进行unset时被调用 56 public function __unset($name) 57 { 58 echo $name; 59 echo '__unset called'.PHP_EOL; 60 } 61 62 //serialize时被调用,当你不需要保存大对象的所有数据时很有用 63 public function __sleep() 64 { 65 echo '__sleep called'.PHP_EOL; 66 return array('var1111111111'); 67 } 68 69 //unserialize时被调用,可用于做些对象的初始化操作 70 public function __wakeup() 71 { 72 echo '__wakeup called'.PHP_EOL; 73 $this->var = 'test after wakeup'; 74 } 75 76 //当一个类被转换成字符串时被调用 77 public function __toString() 78 { 79 return '__toString called'.PHP_EOL; 80 } 81 82 //进行对象clone时被调用,用来调整对象的克隆行为 83 public function __clone() 84 { 85 echo '__clone called'.PHP_EOL; 86 } 87 88 //当以函数方式调用对象时被调用 89 public function __invoke() 90 { 91 echo '__invoke called'.PHP_EOL; 92 } 93 94 //当调用var_export()导出类时,此静态方法被调用。用__set_state的返回值做为var_export的返回值。 95 public static function __set_state($arr) 96 { 97 return '__set_state called'.PHP_EOL; 98 } 99 100 //当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本 101 public function __debuginfo($arr) 102 { 103 echo '__debuginfo called'.PHP_EOL; 104 return array( 105 'var' => 'test fro __debuginfo' 106 ); 107 } 108 } 109 110 $m = new Magic(); //__construct()被调用 111 $m->not_exist_property = test; //__set()被调用 112 echo $m->not_exist_property;//__get()被调用 113 $m->abc(1,2,3); //__call()被调用 114 echo isset($m->not_exist_property); //__isset()被调用,返回bool值 115 unset($m->not_exist_property); //__unset()被调用 116 echo $tmp = serialize($m); //__sleep()被调用 117 unserialize($tmp); //__wakeup()被调用 118 $m1 = clone $m; //__clone()被调用,对象默认是引用传递,使用clone关键词则可实现对象复制 119 $m(); //__invoke() 120 eval( '$m2 = ' . var_export ( $m , true ) . ';' );var_dump($m2); 121 var_dump($m); 122 //最后__destruct()被调用 123 124 /* 125 结果: 126 __construct called 127 not_exist_property-test__set called 128 not_exist_property__get called 129 abc-1,2,3__call called 130 not_exist_property__isset called 131 1not_exist_property__unset called 132 __sleep called 133 O:5:"Magic":1:{s:13:"var1111111111";N;}__wakeup called 134 __destruct called 135 __clone called 136 __invoke called 137 string(20) "__set_state called 138 " 139 class Magic#1 (1) { 140 public $var => 141 string(4) "test" 142 } 143 __destruct called 144 __destruct called 145 146 147 */
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
php返回json数据:1、PHP中的json_encode()用于JSON编码变量,如果功能成功返回JSON数据,则返回FALSE。2、string json_encode ( $value [, $options = 0 ] )。
今天小编就为大家分享一篇关于PDO::inTransaction讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
phpstorm编辑器字体出现乱码的解决办法及步骤是:1、进入phpstorm编辑器设置选项;2、进入文件编码选项;3、将UTF-8改成GBK编码即可。
你清楚php如何实现异步执行吗?其实利用四种方式来处理就行,如果你对这方面感兴趣的话,下文有详解方法和实例,内容详细,逻辑清晰,有需要的朋友可以参考,希望大家阅读完这篇文章后能有所收获,那么下面就一起来了解一下吧。
对于四则运算器,也就是加减乘除计算器,想必大家都有使用过。这篇文章就给大家分享一下用PHP实现简单的四则运算器,这对于刚接触的PHP的朋友,有一定的学习参考价值,感兴趣就继续往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008