写点什么

【web 开发】PHP 特殊的对象引用 "$this"(62)

作者:迷彩
  • 2023-05-03
    广东
  • 本文字数:1636 字

    阅读完需:约 5 分钟

前言

前面我们介绍了面向对象相关的内容,我们了解到访问对象的成员必须通过对象的引用来完成.如果在对象的内部,在对象的成员方法中访问自己对象中的成员属性,或者访问自己对象内其他成员方法时怎么处理呢?

答案只有一个,不管是在对象的外部还是在对象内部,访问对象中的成员都必须使用对象的引用变量,但是对象创建完成以后,对象的引用名称无法在对象的方法中找到. 如果在对象的方法中再次使用 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()方法,让每动物都能向别人介绍自己的名字、年龄和喜欢吃的事物。具体代码如下所示:


<?phpclass Animals{//定义一个动物类	var $name; //定义动物名称	var $age; //动物年龄	var $food; //动物年龄		//定义动物吃饭的成员方法	function eat(){		echo '我是一只' . $this->name . ', 已经' .  $this->age . '岁了,我喜欢吃' . $this->food . '<br>'; //使用$this访问类中的成员属性		echo '我是一只' . $this->name . ', 我喜欢跑跑跳跳<br>';//使用$this访问类中的成员属性	}		//定义动物跑动的方法	function run(){		echo '我是一只' . $this->name . ', 我喜欢跑跑跳跳<br>';//使用$this访问类中的成员属性	}}
//实例化Animals类$animal1 = new Animals();$animal2 = new Animals();$animal3 = new Animals();
//给类中的成员属性赋值$animal1->name = '小猫';$animal1->age = 2;$animal1->food = '鱼干';

//给类中的成员属性赋值$animal2->name = '小羊';$animal2->age = 5;$animal2->food = '草';

//给类中的成员属性赋值$animal3->name = '小兔子';$animal3->age = 3;$animal3->food = '胡萝卜';
//通过实例化的对象访问类中的eat()方法$animal1->eat();$animal2->eat();$animal3->eat();
//通过实例化的对象访问类中的run()方法$animal1->run();$animal2->run();$animal3->run();
复制代码

执行结果如下图:

总结

在上面的代码中,$animal1,$animal2,$animal3 三个对象中都有 eat()和 run()这两个成员方法,如需访问哪个对象中的成员方法 eat(),方法中的 $this 引用就代表的是访问哪个对象,并且通过 $this 访问自己内部相应的成员属性.如果想在对象的成员方法 eat()中调用自己的另一个成员方法 run()方法也是可以的,同样是在 eat()方法中使用 $this->run()的方式来完成对象的访问.

发布于: 刚刚阅读数: 3
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020-06-18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
【web 开发】PHP 特殊的对象引用 "$this"(62)_php_迷彩_InfoQ写作社区