ActiveRecord 模型类中的属性,与类属性区别 [ 2.0 版本 ]
标题可能不是特别明白:
属性类必须继承:yii\base\Object 或其子类即可
属性名不区分大小写
在读取和写入对象的一个$getter = 'get' . $name;不存在的成员变量时, get() set() 会被自动调用。 Yii正是利用这点,提供对属性的支持的。
在 get() set() 会判断是否存在 {$getter = ‘get’ . $name;}这个方法。
ActiveRecord模型类中的属性都是根据关联的数据表来生成的
例如访问继承ActiveRecord的模型类,
$customer = new customer();
$_name = $customer->name;//这里获取name 是否也是通过调用魔法函数__get()来获取到的,
共 1 个回答
-
通过 getter 和 setter 定义的属性也有一些特殊规则和限制:
这类属性的名字是不区分大小写的。如,$object->label 和 $object->Label 是同一个属性。 因为 PHP 方法名是不区分大小写的。
如果此类属性名和类成员变量相同,以后者为准。 例如,假设以上 Foo 类有个 label 成员变量, 然后给 $object->label = 'abc' 赋值,将赋给成员变量而不是 setter setLabel() 方法。
这类属性不支持可见性(访问限制)。定义属性的 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.
灰太狼
最后登录:2023-07-14
在线时长:76小时17分
- 粉丝28
- 金钱3290
- 威望150
- 积分5550