动态地向对象添加私有属性

Omi*_*mid 5 php oop

我有一堂课:

class Foo {
    // Accept an assoc array and appends its indexes to the object as property
    public function extend($values){
        foreach($values as $var=>$value){
            if(!isset($this->$var))
                $this->$var = $value;
        }
    }
}

$Foo = new Foo;
$Foo->extend(array('name' => 'Bee'));
Run Code Online (Sandbox Code Playgroud)

现在该$Foo对象有一个name值为 value的公共属性Bee

如何更改extend函数以使变量私有?

编辑 使用私有数组是另一种方式,绝对不是我的答案。

moo*_*e99 3

只是简单、糟糕的设计。

在运行时添加私有 [!] 字段的目的是什么?现有方法不能依赖此类添加的字段,并且您会弄乱对象功能。

如果你希望你的对象表现得像一个哈希图[即你可以只调用$obj -> newField = $newValue],请考虑使用魔法__get__set方法。

  • 实际上,这将是创建不可变对象的好方法。它就像一个常量的大集合。但凭借 key => val 的好处,值可以是标量、[]、{}... (3认同)