鉴于我有一个对象
$obj = new StdClass();
$obj->name = 'my-object';
这个对象就这样存储了
$store = [
$obj->name => &$obj
];
当属性发生变化时,有没有办法更改商店密钥?
$obj->name = 'new-name';
// $store['new-name'] is not set, $store['my-object'] still is
修改
感谢斯科特指出我不应该以这种方式存储它们。这就是我想出的。这里可能有一些开销,但它是核心功能。
$obj1 = new StdClass();
$obj1->name = 'my-object';
$obj2 = new StdClass();
$obj2->name = 'another-object';
$store = [
$obj1, $obj2
];
$key = 'my-object';
$result = array_filter($store, function ($obj) use ($key) {
return ($obj->name == $key);
});
// Results in: [$obj1]
答案 0 :(得分:0)
您不应该通过可能更改的值存储它。使用唯一标识符或guid。
如果你不能这样做(你应该这样做),那么将name属性设为私有,并使用setName()
函数。在该函数中,找到对象存储,删除旧对象,然后更改名称,然后使用新名称添加对象。因为对象现在需要了解商店,所以您将拥有更紧密耦合的代码(这可能很糟糕,但可能是必要的)。