Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
317 views
in Technique[技术] by (71.8m points)

php - Dynamically add a private property to an object

I have a class:

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'));

Now the $Foo object has a public name property with value Bee.

How to change extend function to make variables private ?

Edit Using a private array is another way and definitely not my answer.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You could do something like this.

The __get function will check if the given key is set inside the private property.

class Foo {

private $data = array();

// Accept an array and appends its indexes to the object as property
public function extend($values){
    foreach($values as $i=>$v){
        if(!isset($this->$i))
            $this->data[$i] = $v;
    }
}

public function __get($key) {
    if (isset($this->data[$key])) {
        return $this->data[$key];
    }
}

}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...