ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:56.43KB ,
资源ID:17502394      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17502394.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PHP之十六个魔术方法详解.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

PHP之十六个魔术方法详解.docx

1、PHP之十六个魔术方法详解PHP之十六个魔术方法详解PHP中把以两个下划线_开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。作者:佚名来源:segmentfault|2016-10-27 15:58收藏 分享 前言PHP中把以两个下划线_开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括:1. _construct(),类的构造函数2. _destruct(),类的析构函数3. _call(),在对象中调用一个不可访问方法时调用4. _callStatic(),用静态方式中调用一个不可访问方

2、法时调用5. _get(),获得一个类的成员变量时调用6. _set(),设置一个类的成员变量时调用7. _isset(),当对不可访问属性调用isset()或empty()时调用8. _unset(),当对不可访问属性调用unset()时被调用。9. _sleep(),执行serialize()时,先会调用这个函数10. _wakeup(),执行unserialize()时,先会调用这个函数11. _toString(),类被当成字符串时的回应方法12. _invoke(),调用函数的方式调用一个对象时的回应方法13. _set_state(),调用var_export()导出类时,此静态方

3、法会被调用。14. _clone(),当对象复制完成时调用15. _autoload(),尝试加载未定义的类16. _debugInfo(),打印所需调试信息范例下面让我们以实例的形式向大家讲解下这几个魔术方法时如何使用的。一、 _construct(),类的构造函数php中构造方法是对象创建完成后第一个被对象自动调用的方法。在每个类中都有一个构造方法,如果没有显示地声明它,那么类中都会默认存在一个没有参数且内容为空的构造方法。1、 构造方法的作用通常构造方法被用来执行一些有用的初始化任务,如对成员属性在创建对象时赋予初始值。2、 构造方法的在类中的声明格式1. function_constr

4、ct(参数列表)2. 3. 方法体/通常用来对成员属性进行初始化赋值4. 5. 3、 在类中声明构造方法需要注意的事项 在同一个类中只能声明一个构造方法,原因是,PHP不支持构造函数重载。 构造方法名称是以两个下画线开始的_construct()下面是它的例子:1. name=$name;14. $this-sex=$sex;15. $this-age=$age;16. 17. 18. /*19. *say方法20. */21. publicfunctionsay()22. 23. echo我叫:.$this-name.,性别:.$this-sex.,年龄:.$this-age;24. 25.

5、 26. 创建对象$Person1且不带任参数1. $Person1=newPerson();2. 3. echo$Person1-say();/输出:我叫:,性别:男,年龄:27创建对象$Person2且带参数“小明”1. $Person2=newPerson(小明);2. 3. echo$Person2-say();/输出:我叫:张三,性别:男,年龄:27创建对象$Person3且带三个参数1. $Person3=newPerson(李四,男,25);2. 3. echo$Person3-say();/输出:我叫:李四,性别:男,年龄:25二、_destruct(),类的析构函数通过上面的

6、讲解,现在我们已经知道了什么叫构造方法。那么与构造方法对应的就是析构方法。析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。析构方法是PHP5才引进的新内容。析造方法的声明格式与构造方法 _construct() 比较类似,也是以两个下划线开始的方法 _destruct() ,这种析构方法名称也是固定的。1、 析构方法的声明格式1. function_destruct()2. 3. 4. 5. /方法体6. 7. 注意:析构函数不能带有任何参数。2、 析构方法的作用一般来说,析构方法在PHP中并不是很常用,它属类中可选择的一部分,通常用来完成一些在对象销毁

7、前的清理任务。举例演示,如下:1. name=$name;11. $this-sex=$sex;12. $this-age=$age;13. 14. 15. /*16. *say说话方法17. */18. publicfunctionsay()19. 20. echo我叫:.$this-name.,性别:.$this-sex.,年龄:.$this-age;21. 22. 23. /*24. *声明一个析构方法25. */26. publicfunction_destruct()27. 28. echo我觉得我还可以再抢救一下,我的名字叫.$this-name;29. 30. 31. 32. $

8、Person=newPerson(小明);33. unset($Person);/销毁上面创建的对象$Person上面的程序运行时输出:我觉得我还可以再抢救一下,我的名字叫小明三、 _call(),在对象中调用一个不可访问方法时调用。该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $arguments 则以数组的方式接收不存在方法的多个参数。1、 _call() 方法的格式:1. function_call(string$function_name,array$arguments)2. 3. 4. 5. /方法体6. 7. 2、 _call() 方

9、法的作用:为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用 _call() 方法来避免。该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。请参考如下代码:1. ?php2. classPerson3. 4. functionsay()5. 6. 7. echoHello,world!;8. 9. 10. /*11. *声明此方法用来处理调用对象中不存在的方法12. */13. function_call($funName,$arguments)14. 15. echo你所调用的函数:.$funName.(参数:;/输出调用不存在的方法名16. print_r($a

10、rguments);/输出调用不存在的方法时的参数列表17. echo)不存在!n;/结束换行18. 19. 20. $Person=newPerson();21. $Person-run(teacher);/调用对象中不存在的方法,则自动调用了对象中的_call()方法22. $Person-eat(小明,苹果);23. $Person-say();运行结果:1. 你所调用的函数:run(参数:Array(0=teacher)不存在!2. 3. 你所调用的函数:eat(参数:Array(0=小明1=苹果)不存在!4. 5. Hello,world!四、 _callStatic(),用静态方式

11、中调用一个不可访问方法时调用此方法与上面所说的 _call() 功能除了 _callStatic() 是未静态方法准备的之外,其它都是一样的。请看下面代码:1. ?php2. classPerson3. 4. functionsay()5. 6. 7. echoHello,world!;8. 9. 10. /*11. *声明此方法用来处理调用对象中不存在的方法12. */13. publicstaticfunction_callStatic($funName,$arguments)14. 15. echo你所调用的静态方法:.$funName.(参数:;/输出调用不存在的方法名16. prin

12、t_r($arguments);/输出调用不存在的方法时的参数列表17. echo)不存在!n;/结束换行18. 19. 20. $Person=newPerson();21. $Person:run(teacher);/调用对象中不存在的方法,则自动调用了对象中的_call()方法22. $Person:eat(小明,苹果);23. $Person-say();运行结果如下:1. 你所调用的静态方法:run(参数:Array(0=teacher)不存在!2. 3. 你所调用的静态方法:eat(参数:Array(0=小明1=苹果)不存在!4. 5. Hello,world!五、 _get(),

13、获得一个类的成员变量时调用在 php 面向对象编程中,类的成员属性被设定为 private 后,如果我们试图在外面调用它则会出现“不能访问某个私有属性”的错误。那么为了解决这个问题,我们可以使用魔术方法 _get()。 魔术方法_get()的作用在程序运行过程中,通过它可以在对象的外部获取私有成员属性的值。我们通过下面的 _get() 的实例来更进一步的连接它吧:1. name=$name;10. $this-age=$age;11. 12. 13. /*14. *在类中添加_get()方法,在直接获取属性值时自动调用一次,以属性名作为参数传入并处理15. *param$propertyNam

14、e16. *17. *returnint18. */19. publicfunction_get($propertyName)20. 21. if($propertyName=age)22. if($this-age30)23. return$this-age-10;24. else25. return$this-$propertyName;26. 27. else28. return$this-$propertyName;29. 30. 31. 32. $Person=newPerson(小明,60);/通过Person类实例化的对象,并通过构造方法为属性赋初值33. echo姓名:.$Pe

15、rson-name.;/直接访问私有属性name,自动调用了_get()方法可以间接获取34. echo年龄:.$Person-age.;/自动调用了_get()方法,根据对象本身的情况会返回不同的值运行结果:1. 姓名:小明2. 3. 年龄:50六、 _set(),设置一个类的成员变量时调用 _set() 的作用:_set( $property, $value ) 方法用来设置私有属性, 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。请看下面的演示代码:1. name=$name;10. $this-age=$age;11. 12. 13. /*14. *声明魔术

16、方法需要两个参数,真接为私有属性赋值时自动调用,并可以屏蔽一些非法赋值15. *param$property16. *param$value17. */18. publicfunction_set($property,$value)19. if($property=age)20. 21. if($value150|$value$property=$value;26. 27. 28. /*29. *在类中声明说话的方法,将所有的私有属性说出30. */31. publicfunctionsay()32. echo我叫.$this-name.,今年.$this-age.岁了;33. 34. 35.

17、 36. $Person=newPerson(小明,25);/注意,初始值将被下面所改变37. /自动调用了_set()函数,将属性名name传给第一个参数,将属性值”李四”传给第二个参数38. $Person-name=小红;/赋值成功。如果没有_set(),则出错。39. /自动调用了_set()函数,将属性名age传给第一个参数,将属性值26传给第二个参数40. $Person-age=16;/赋值成功41. $Person-age=160;/160是一个非法值,赋值失效42. $Person-say();/输出:我叫小红,今年16岁了运行结果:1. 我叫小红,今年16岁了七、 _iss

18、et(),当对不可访问属性调用isset()或empty()时调用在看这个方法之前我们看一下isset()函数的应用,isset()是测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false。那么如果在一个对象外面使用isset()这个函数去测定对象里面的成员是否被设定可不可以用它呢?分两种情况,如果对象里面成员是公有的,我们就可以使用这个函数来测定成员属性,如果是私有的成员属性,这个函数就不起作用了,原因就是因为私有的被封装了,在外部不可见。那么我们就不可以在对象的外部使用isset()函数来测定私有成员属性是否被设定了呢?当然是可以的,但不是一成

19、不变。你只要在类里面加上一个_isset()方法就可以了,当在类外部使用isset()函数来测定对象里面的私有成员是否被设定时,就会自动调用类里面的_isset()方法了帮我们完成这样的操作。 _isset()的作用:当对不可访问属性调用 isset() 或 empty() 时,_isset() 会被调用。请看下面代码演示:1. name=$name;11. $this-age=$age;12. $this-sex=$sex;13. 14. 15. /*16. *param$content17. *18. *returnbool19. */20. publicfunction_isset($c

20、ontent)21. echo当在类外部使用isset()函数测定私有成员$content时,自动调用;22. echoisset($this-$content);23. 24. 25. 26. $person=newPerson(小明,25);/初始赋值27. echoisset($person-sex),;28. echoisset($person-name),;29. echoisset($person-age),;运行结果如下:1. 1/public可以isset()2. 3. 当在类外部使用isset()函数测定私有成员name时,自动调用/_isset()内第一个echo4. 5. 1/_isset()内第二个echo

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2