通过 getter 和 setter 定义的属性也有一些特殊规则和限制:
- 这类属性的名字是不区分大小写的。如,
$object->label
和$object->Label
是同一个属性。 因为 PHP 方法名是不区分大小写的。 - 如果此类属性名和类成员变量相同,以后者为准。 例如,假设以上
Foo
类有个label
成员变量, 然后给$object->label = 'abc'
赋值,将赋给成员变量而不是 settersetLabel()
方法。 - 这类属性不支持可见性(访问限制)。定义属性的 getter 和 setter 方法是 public、protected 还是 private 对属性的可见性没有任何影响。
- 这类属性的 getter 和 setter 方法只能定义为非静态的,若定义为静态方法(static)则不会以相同方式处理。
- A normal call to
property_exists()
does not work to determine magic properties. You should call yii\base\Object::canGetProperty() or yii\base\Object::canSetProperty() respectively.