私は奇妙なことに出くわしました。私はこれに似たクラスを持っています:
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();
、2 つの配列が出力されます。
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)
すると、プライベート要素を変更できます。だから私は回避策を持っていますが、なぜこれが起こるのかを知ることはまだいいでしょう.