为了账号安全,请及时绑定邮箱和手机立即绑定

php类和对象之创建一个对象

<?php
//定义一个Car类并实例化一个对象
class Car{
 public $name='car';
 public function getName(){
     return $this->name;
 }
}
$car=new Car();
// $car->name='adfa';
echo $car->getName();
?>

为什么当实例化对象$car->name属性注释掉,返回的结果是car;如果没有注释掉,返回的结果是adfa,不太理解以及this指针在这里的作用

正在回答

5 回答

name在这里是类的属性,即这个类的对象的公共属性,

代码为你演示的重点是类的属性和方法之间的调用,即在外部如何通过方法调用属性。

实际案例中,经常是将将类的属性设置为保护或私有,如果需要用到该属性,只能在类中通过方法获取和赋值,

而不能在外部通过类名->属性名获取或赋值。

如代码中的get方法获取,同理赋值也在类内部,防止像$car->name=''的外部随意赋值的情况。

至于原因呀,太多说不完,安全/规范/资源等等拉。

你比我强的是,我以前学的时候都不会思考这种情形,只会按部就班来什么学什么。

2 回复 有任何疑惑可以回复我~
#1

qq_薯条配可乐_03787165 提问者

非常感谢!
2016-11-06 回复 有任何疑惑可以回复我~

我的理解,假如你家有各种车。 你老婆说开车送我,这个车没特指(你只知道开车,没特指哪一辆,你脑子里只有“开车”,echo 开车;)。假设你是死脑筋,这车就开不了,因为他没说开哪辆。这个车就类似那个 类 的概念。

然后你老婆又说,开奥迪,这就是实例化了,你脑子里有了“开奥迪”, echo 开奥迪;。

1 回复 有任何疑惑可以回复我~

just for demonstration!

0 回复 有任何疑惑可以回复我~

我理解了你说的意思,可是我觉得在实际案例中有必要声明类的name属性吗(public $name='car';)?他要获取的应该是实例化对象的name,为什么此案例中还写了这一句呢?

0 回复 有任何疑惑可以回复我~

$this是指这个对象本身,注释掉的时候走的流程:实例化对象-->调用方法getName-->getName获得对象的name属性,也就是car;而没有注释时,实例化对象-->给对象的name属性重新赋值为adfa-->调用方法getName-->getName获得对象的name属性(已经重新赋值为adfa),所以输出为adfa。简单的说,注释掉输出的是初始的name属性,没注释输出的是重新赋值后的name属性。希望说清楚了

1 回复 有任何疑惑可以回复我~
#1

qq_薯条配可乐_03787165 提问者

我理解了你说的意思,可是我觉得在实际案例中有必要声明类的name属性吗(public $name='car';)?他要获取的应该是实例化对象的name,为什么此案例中还写了这一句呢?
2016-11-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181683    人
  • 解答问题       2575    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程

php类和对象之创建一个对象

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信