<?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指针在这里的作用
name在这里是类的属性,即这个类的对象的公共属性,
代码为你演示的重点是类的属性和方法之间的调用,即在外部如何通过方法调用属性。
实际案例中,经常是将将类的属性设置为保护或私有,如果需要用到该属性,只能在类中通过方法获取和赋值,
而不能在外部通过类名->属性名获取或赋值。
如代码中的get方法获取,同理赋值也在类内部,防止像$car->name=''的外部随意赋值的情况。
至于原因呀,太多说不完,安全/规范/资源等等拉。
你比我强的是,我以前学的时候都不会思考这种情形,只会按部就班来什么学什么。
我的理解,假如你家有各种车。 你老婆说开车送我,这个车没特指(你只知道开车,没特指哪一辆,你脑子里只有“开车”,echo 开车;)。假设你是死脑筋,这车就开不了,因为他没说开哪辆。这个车就类似那个 类 的概念。
然后你老婆又说,开奥迪,这就是实例化了,你脑子里有了“开奥迪”, echo 开奥迪;。
just for demonstration!
我理解了你说的意思,可是我觉得在实际案例中有必要声明类的name属性吗(public $name='car';)?他要获取的应该是实例化对象的name,为什么此案例中还写了这一句呢?
$this是指这个对象本身,注释掉的时候走的流程:实例化对象-->调用方法getName-->getName获得对象的name属性,也就是car;而没有注释时,实例化对象-->给对象的name属性重新赋值为adfa-->调用方法getName-->getName获得对象的name属性(已经重新赋值为adfa),所以输出为adfa。简单的说,注释掉输出的是初始的name属性,没注释输出的是重新赋值后的name属性。希望说清楚了