2016-12-30 23:32:31 1840次浏览 1条回答 0 悬赏 10 金钱

标题可能不是特别明白:

属性类必须继承:yii\base\Object 或其子类即可
属性名不区分大小写
在读取和写入对象的一个$getter = 'get' . $name;不存在的成员变量时, get() set() 会被自动调用。 Yii正是利用这点,提供对属性的支持的。
在 get() set() 会判断是否存在 {$getter = ‘get’ . $name;}这个方法。

ActiveRecord模型类中的属性都是根据关联的数据表来生成的

例如访问继承ActiveRecord的模型类,
$customer = new customer();
$_name = $customer->name;//这里获取name 是否也是通过调用魔法函数__get()来获取到的,

  • 回答于 2017-01-16 19:28 举报

    通过 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.

您需要登录后才可以回答。登录 | 立即注册
灰太狼
副总裁

灰太狼

注册时间:2016-11-19
最后登录:2023-07-14
在线时长:76小时17分
  • 粉丝28
  • 金钱3290
  • 威望150
  • 积分5550

热门问题