我刚刚遇到了一些奇怪的事情。我有一个与此类似的课程:
class Test {
public $id;
public $name;
public $details;
private $hidden;
private $otherhidden;
public function __construct() {
$this->id = 1;
$this->name = 'test';
$this->details = 'test';
$this->hidden = 1;
$this->otherhidden = 1;
}
public function toArray() {
$array = (array) $this;
print_r($array);
$array['Testhidden'] = 2;
$array['Testotherhidden'] = 2;
unset($array['details']);
unset($array['Testhidden']);
unset($array['Testotherhidden']);
print_r($array);
return $array;
}
}
如果我创建一个Test的实例,$test = new Test;
然后运行$array = $test->toArray();
两个数组,打印出来的是:
Array
(
[id] => 1
[name] => test
[details] => test
[Testhidden] => 1
[Testotherhidden] => 1
)
Array
(
[id] => 1
[name] => test
[Testhidden] => 1
[Testotherhidden] => 1
)
所以它让我取消设置details
数组中的键项,但它不会让我修改值或取消设置对象中私有元素中的值。关于为什么它不允许我修改数组的值的任何想法?显然,有某种类型的继承从对象传递到数组。
编辑
如果我使用get_object_vars()
而不是(array)
我可以修改私有元素。所以我有一个解决方法,但很高兴知道为什么会发生这种情况。