Yii2.0 中 getter 和 setter 方法的使用 [ 技术分享 ]
读文档“关键概念--属性”部分,产生了几个困惑。 1、如果一个类,实现了getter和setter方法,但是不继承Yii\base\Object,可以直接用属性名来访问吗?
class Demo
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($value)
{
$this->name = $value;
}
}
$obj = new Demo();
echo $obj->name;
(fatal error:原因是访问了私有变量;说明不继承Object,在使用私有变量的时候就不会去调用getter和setter方法,所以不能在这种情况下直接用属性名访问私有成员变量。如果成员变量是公有的,那当然是可以访问的。);
2、如何理解“如果此类属性名和类成员变量相同,以后者为准。例如,假设以上 Foo 类有个 label 成员变量,然后给 $object->label = 'abc'
赋值,将赋给成员变量而不是 setter setLabel()
方法。”
困惑:属性名和类成员变量相同?属性名不就是成员变量吗?难到还会重复定义属性?
猜想:如果一个属性是私有的,而可以访问该属性,一定是调用了getter或setter方法;那如果这个属性是公有的,而我们也为这个属性定义了setter和getter,这个时候访问该属性,有没有调用getter和setter呢?
验证:
class Demo extends Object
{
public $name = "1";
public function getName()
{
return $this->name;
}
public function setName($value = '2')
{
$this->name = $value;
}
}
$obj = new Deal();
$obj->name = "3";
echo $obj->name;(输出为3,说明$obj->name直接访问的属性而没有调用setter方法。);
共 2 条回复
thumber
注册时间:2015-05-06
最后登录:2018-09-13
在线时长:21小时32分
最后登录:2018-09-13
在线时长:21小时32分
- 粉丝9
- 金钱1140
- 威望0
- 积分1350