让我们先来看看yiichina中权威指南的描述:
这类属性的名字是不区分大小写的。如,$object->label
和 $object->Label
是同一个属性。 因为 php 方法名是不区分大小写的。如果此类属性名和类成员变量相同,以后者为准。 例如,假设以上 Foo
类有个 label
成员变量, 然后给 $object->label = 'abc'
赋值,将赋给成员变量而不是 setter setLabel()
方法。这类属性不支持可见性(访问限制)。定义属性的 getter 和 setter 方法是 public、PRotected 还是 private 对属性的可见性没有任何影响。这类属性的 getter 和 setter 方法只能定义为非静态的,若定义为静态方法(static)则不会以相同方式处理。对 property_exists()
不能确定魔术属性的正常调用。你应该调用 canGetProperty() 或 canSetProperty()。如果此类属性名和类成员变量相同,以后者为准。 例如,假设以上 Foo 类有个 label 成员变量, 然后给 $object->label = ‘abc’ 赋值,将赋给成员变量而不是 setter setLabel() 方法。
其实这句话就是说嘛我们的setter和getter只对隐藏属性和受保护属性起作用。如果是public修饰符修饰的变量则直接会赋值和获取,而不会经过我们的setter或者getter,例子:
新闻热点
疑难解答