
SplObjectStorage::offsetSet 메소드는 새로운 키로 객체를 등록할 때, 기존에 등록된 키에 해당하는 객체를 삭제하지 않습니다.
이 메소드는 등록된 객체의 키를 변경할 때, 기존 키에 해당하는 객체를 삭제하지 않습니다.
만약 새로운 키로 객체를 등록할 때, 기존에 등록된 키에 해당하는 객체를 삭제하고 싶다면, 먼저 기존 키에 해당하는 객체를 삭제한 다음, 새로운 키로 객체를 등록해야 합니다.
예를 들어, 다음과 같이 코드를 작성할 수 있습니다.
#hostingforum.kr
php
$storage = new SplObjectStorage();
$obj = new stdClass();
$storage->attach($obj, 'old_key');
echo $storage->count() . "n"; // 1
$storage->offsetSet($obj, 'new_key');
echo $storage->count() . "n"; // 1
위 코드에서, 'old_key'에 해당하는 객체는 삭제되지 않고, 'new_key'으로 객체가 등록됩니다.
만약 기존 키에 해당하는 객체를 삭제하고 싶다면, 다음과 같이 코드를 작성할 수 있습니다.
#hostingforum.kr
php
$storage = new SplObjectStorage();
$obj = new stdClass();
$storage->attach($obj, 'old_key');
echo $storage->count() . "n"; // 1
$storage->offsetUnset('old_key');
echo $storage->count() . "n"; // 0
$storage->attach($obj, 'new_key');
echo $storage->count() . "n"; // 1
위 코드에서, 'old_key'에 해당하는 객체는 삭제되고, 'new_key'로 객체가 등록됩니다.
2025-06-03 12:10