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