yii2-object

Property 用于表示类的状态。

从访问方式上看,PropertyField 没有区别。
你能一眼看出 $object->foo 中的 foo 是成员变量还是属性么?显然不行。

但是,成员变量是就类的结构构成而言的概念,而属性是就类的功能逻辑而言的概念,两者紧密联系又相互区别。比如,我们说People 类有一个成员变量 int $age ,表示年龄。那么这里年龄就是属性 , $age 就是成员变量。

ActiveRecord 封装属性无效

尝试将数据库字段封装成属性,但是失败了。是因为 数据库字段 不是 private

ActiveRecord 上对数据库字段 created_at 封装无效。

class Order extends ActiveRecord
{
    ...
    public function getCreatedAt(){
        return date('Y-m-d H:i:s', $this->created_at);
    }

    public function setCreatedAt($datetime)
    {
        $this->created_at = strtotime($datetime);
    }
}

实际读取数据时,依然读取的是 unix timestamp

实际赋值时后,$this->created_at 依然为 2017-12-01

private field 封装成 property

namespace app\components; 
 
use yii\base\BaseObject; 
 
class Foo extend BaseObject
{ 
    private $_label; 
 
    public function getLabel() 
    { 
        return $this->_label; 
    } 
 
    public function setLabel($value) 
    { 
        $this->_label = trim($value); 
    } 
}
// 等效于 $label = $object->getLabel(); 
$label = $object->label; 
 
// 等效于 $object->setLabel('abc'); 
$object->label = 'abc';

应用实例

定义属性 fullName

class Customer extends ActiveRecord {
    public function getFullName()
    {
        return trim($this->first_name . ' ' . $this->last_name);
    }
}

使用

$names = $customer->fullName;