文章详情
PHP魔术方法总结
发布时间:2021-10-21
沉默小管-技术博客
PHP魔术函数的使用
1746
1
原文地址:
https://www.php-china.com//detail/8
H1
H2
H3
H4
H5
H6
<p class="MsoNormal"> <span style="line-height:1;">__construct()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">实例化对象时被调用, 当</span><span style="line-height:1;">__construct</span><span style="line-height:1;">和以类名为函数名的函数同时存在时,</span><span style="line-height:1;">__construct</span><span style="line-height:1;">将被调用,另一个不被调用。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__destruct()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">当删除一个对象或对象操作终止时被调用。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__call()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">对象调用某个方法, 若方法存在,则直接调用;若不存在,则会去调用</span><span style="line-height:1;">__call</span><span style="line-height:1;">函数。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__get()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">读取一个对象的属性时,若属性存在,则直接返回属性值; 若不存在,则会调用</span><span style="line-height:1;">__get</span><span style="line-height:1;">函数。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__set()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">设置一个对象的属性时, 若属性存在,则直接赋值;</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;">若不存在,则会调用</span><span style="line-height:1;">__set</span><span style="line-height:1;">函数。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__toString()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">打印一个对象的时被调用。如</span><span style="line-height:1;">echo obj;</span><span style="line-height:1;">或</span><span style="line-height:1;">printobj;</span><span style="line-height:1;">或</span><span style="line-height:1;">printobj;</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__clone()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">克隆对象时被调用。如:</span><span style="line-height:1;">t=newTest();t=newTest();t1=clone $t;</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__sleep()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">serialize</span><span style="line-height:1;">之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__wakeup()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">unserialize</span><span style="line-height:1;">时被调用,做些对象的初始化工作。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__isset()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">检测一个对象的属性是否存在时被调用。如:</span><span style="line-height:1;">isset($c->name)</span><span style="line-height:1;">。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__unset()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">unset</span><span style="line-height:1;">一个对象的属性时被调用。如:</span><span style="line-height:1;">unset($c->name)</span><span style="line-height:1;">。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__set_state()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">调用</span><span style="line-height:1;">var_export</span><span style="line-height:1;">时,被调用。用</span><span style="line-height:1;">__set_state</span><span style="line-height:1;">的返回值做为</span><span style="line-height:1;">var_export</span><span style="line-height:1;">的返回值。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">__autoload()</span> </p> <p class="MsoNormal"> <span style="line-height:1;">实例化一个对象时,如果对应的类不存在,则该方法被调用。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">举例说明</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;">1 </span><span style="line-height:1;">魔术方法</span><span style="line-height:1;"> __get() </span><span style="line-height:1;">当试图读取一个并不存在的属性的时候被调用。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;">如果试图读取一个对象并不存在的属性的时候,</span><span style="line-height:1;">PHP</span><span style="line-height:1;">就会给出错误信息。如果在类里添加</span><span style="line-height:1;">__get</span><span style="line-height:1;">方法,并且我们可以用这个函数实现类似</span><span style="line-height:1;">java</span><span style="line-height:1;">中反射的各种操作。</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">class Test</span> </p> <p class="MsoNormal"> <span style="line-height:1;">{</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> public function __get($key)</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> {</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> echo $key . " </span><span style="line-height:1;">不存在</span><span style="line-height:1;">";</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> }</span> </p> <p class="MsoNormal"> <span style="line-height:1;">}</span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t = new Test();</span> </p> <p class="MsoNormal"> <span style="line-height:1;">echo $t->name;</span> </p> <p class="MsoNormal"> <span style="line-height:1;">就会输出:</span><span style="line-height:1;">name </span><span style="line-height:1;">不存在</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">2 </span><span style="line-height:1;">魔术方法</span><span style="line-height:1;"> __set() </span><span style="line-height:1;">当试图向一个并不存在的属性写入值的时候被调用。</span> </p> <p class="MsoNormal"> <span style="line-height:1;">class Test</span> </p> <p class="MsoNormal"> <span style="line-height:1;">{</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> public function __set($key, $value)</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> {</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> echo '</span><span style="line-height:1;">对</span><span style="line-height:1;">' . $key . "</span><span style="line-height:1;">附值</span><span style="line-height:1;">" . $value;</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> }</span> </p> <p class="MsoNormal"> <span style="line-height:1;">}</span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t = new Test();</span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t->name = "aninggo";</span> </p> <p class="MsoNormal"> <span style="line-height:1;">就会输出:对</span><span style="line-height:1;"> name </span><span style="line-height:1;">附值</span><span style="line-height:1;"> aninggo</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">3 </span><span style="line-height:1;">魔术方法</span><span style="line-height:1;"> __call() </span><span style="line-height:1;">当试图调用一个对象并不存在的方法时,调用该方法。</span> </p> <p class="MsoNormal"> <span style="line-height:1;">class Test</span> </p> <p class="MsoNormal"> <span style="line-height:1;">{</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> public function __call($Key, $Args)</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> {</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> echo "</span><span style="line-height:1;">您要调用的</span><span style="line-height:1;"> {$Key} </span><span style="line-height:1;">方法不存在。你传入的参数是:</span><span style="line-height:1;">" . print_r($Args, true);</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> }</span> </p> <p class="MsoNormal"> <span style="line-height:1;">}</span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t = new Test();</span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t->getName(aning, go);</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">程序将会输出:</span><span></span> </p> <p class="MsoNormal"> <span style="line-height:1;">您要调用的</span><span style="line-height:1;"> getName </span><span style="line-height:1;">方法不存在。参数是:</span><span style="line-height:1;">Array</span> </p> <p class="MsoNormal"> <span style="line-height:1;">(</span> </p> <p class="MsoNormal"> <span style="line-height:1;">[0] => aning</span> </p> <p class="MsoNormal"> <span style="line-height:1;">[1] => go</span> </p> <p class="MsoNormal"> <span style="line-height:1;">)</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">4 </span><span style="line-height:1;">魔术方法</span><span style="line-height:1;"> __toString() </span><span style="line-height:1;">当打印一个对象的时候被调用,这个方法类似于</span><span style="line-height:1;">java</span><span style="line-height:1;">的</span><span style="line-height:1;">toString</span><span style="line-height:1;">方法,当我们直接打印对象的时候回调用这个函数。</span><span></span> </p> <p class="MsoNormal"> <br /> </p> <p class="MsoNormal"> <span style="line-height:1;">class Test</span> </p> <p class="MsoNormal"> <span style="line-height:1;">{</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> public function __toString()</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> {</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> return "</span><span style="line-height:1;">打印</span><span style="line-height:1;"> Test";</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> }</span> </p> <p class="MsoNormal"> <span style="line-height:1;">}</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t = new Test();</span> </p> <p class="MsoNormal"> <span style="line-height:1;">echo $t;</span> </p> <p class="MsoNormal"> <span style="line-height:1;">运行</span><span style="line-height:1;">echo </span><span style="line-height:1;">的时候,就会调用</span><span style="line-height:1;"> __toString(); </span><span style="line-height:1;">从而程序将会输出:打印</span><span style="line-height:1;"> Test;</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> </span> </p> <p class="MsoNormal"> <span style="line-height:1;">5 </span><span style="line-height:1;">魔术方法</span><span style="line-height:1;">__clone() </span><span style="line-height:1;">当对象被克隆时,被调用。</span> </p> <p class="MsoNormal"> <span style="line-height:1;">class Test</span> </p> <p class="MsoNormal"> <span style="line-height:1;">{</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> public function __clone()</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> {</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> echo "</span><span style="line-height:1;">我被复制了!</span><span style="line-height:1;">";</span> </p> <p class="MsoNormal"> <span style="line-height:1;"> }</span> </p> <p class="MsoNormal"> <span style="line-height:1;">}</span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t = new Test();</span> </p> <p class="MsoNormal"> <span style="line-height:1;">$t1 = clone $t;</span> </p> <p class="MsoNormal"> <span style="line-height:1;">程序输出:我被复制了!</span> </p> <p class="MsoNormal"> <span style="line-height:1;">————————————————</span> </p> <p class="MsoNormal"> <span style="line-height:1;">原文链接:</span><span style="line-height:1;">https://blog.csdn.net/mnmnwq/article/details/82462108</span> </p> <br />
上一篇
下一篇
收藏
支持
标签:
作者推荐
热门推荐
最新文章
统计信息
联系站长
加入技术群
日志总数:92篇
网站运行:1486天
累计访客:13629
热门文章
1. PHP基础概念
2. redis:ERR AUTH <password> called without any password configured for the default user解决办法
3. PHP的语言结构之包含文件
4. PHP中public,private,protected的区别
5. PHP魔术方法总结
6. php如何转换json格式中的中文
7. PHP7新特性(常用)
8. PHP7上项目报错A non-numeric value encountered解决办法
9. 运行golang出现invalid memory address or nil pointer dereference错误
10. git常用命令集合