【web 开发】PHP 特殊的对象引用 "$this"(62)
前言
前面我们介绍了面向对象相关的内容,我们了解到访问对象的成员必须通过对象的引用来完成.如果在对象的内部,在对象的成员方法中访问自己对象中的成员属性,或者访问自己对象内其他成员方法时怎么处理呢?
答案只有一个,不管是在对象的外部还是在对象内部,访问对象中的成员都必须使用对象的引用变量,但是对象创建完成以后,对象的引用名称无法在对象的方法中找到. 如果在对象的方法中再次使用 new 关键字创建一个对象则是另一 个对象,调用的成员也是另一个新创建对象的成员。而且对象一旦被创建,在对象中的每个成员方法里面都会存在一个特殊的对象引用“$this . 成员方法属于哪个对象,$this 引用就代表哪个对象,专门用来完成对象内部成员之间的访问. this 的本意就是“这个”的意思,就像每个人都可以使用第一人称代词 “我"代表自己一样. 比如,别人想访问你的年龄,就必须使用“张三的年龄”的形式,相当于在对象外部使用引用名称“张三”访问它内部的成员属性“年龄”. 如果自己想说出自己的年龄,则使用“ 我的年龄”的形式,相当于在对象的内部使用引用名称“我”访问自己内部的成员。
代码实践:是骡子是马拉出来溜溜
接着我们通过具体例子来介绍相关的使用情况, 比如,在类 Person 中声明了两个方法 say()和 run(),通过类 Person 实例化的三个实例对象 $person1、$person2 和 $person3 中都会存在 say()和 run()这两个成员方法,则每个对象中的这两个成员方法各自存在一个 $this 引用。在对象 $person1 的两个成员方法中的 $this 引用代表 $person1,在对象 $person2 的两个成员方法中的 $this 引用代表 $person2,在对象 $person3 的两个成员方法中的 $this 引用代表 $person3,可以明显看出,特殊的对象引用 $this 就是在对象内部的成员方法中,代表着“本对象”的一个引用,但只能在对象的成员方法中使用。不管是在对象内部使用 $this 访问自己对象内部的成员,还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符号来完成访问。下面我们通过代码实例来介绍 $this 的使用,定义一个 Animals 类,在声明类 Animals 时,成员方法 eat()中使用 $this 引用访问自己对的内部的所有成员属性。然后调用每个对象中的 eat()方法和 run()方法,让每动物都能向别人介绍自己的名字、年龄和喜欢吃的事物。具体代码如下所示:
执行结果如下图:
总结
在上面的代码中,$animal1,$animal2,$animal3 三个对象中都有 eat()和 run()这两个成员方法,如需访问哪个对象中的成员方法 eat(),方法中的 $this 引用就代表的是访问哪个对象,并且通过 $this 访问自己内部相应的成员属性.如果想在对象的成员方法 eat()中调用自己的另一个成员方法 run()方法也是可以的,同样是在 eat()方法中使用 $this->run()的方式来完成对象的访问.
版权声明: 本文为 InfoQ 作者【迷彩】的原创文章。
原文链接:【http://xie.infoq.cn/article/dce42813393064a88b440e73d】。文章转载请联系作者。
评论