您以错误的方式访问属性。使用$this->$my_value = ..
语法,可以使用$ my_value中的值名称设置属性。你想要的是$this->my_value = ..
$var = "my_value";
$this->$var = "test";
是相同的
$this->my_value = "test";
class my_class {
public $my_value = array();
function __construct ($value) {
$this->my_value[] = $value;
}
function set_value ($value) {
if (!is_array($value)) {
throw new Exception("Illegal argument");
}
$this->my_value = $value;
}
function add_value($value) {
$this->my_value = $value;
}
}
$a = new my_class ('a');
$a->my_value[] = 'b';
$a->add_value('c');
$a->set_value(array('d'));
这样可以确保在调用set_value时,my_value不会将其类型更改为字符串或其他类型。但是您仍然可以直接设置my_value的值,因为它是公共的。最后一步是将my_value设为私有,并且仅通过getter / setter方法访问my_value