欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:17502394       资源大小:56.43KB        全文页数:34页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    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


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开