
SplObjectStorage::offsetUnset() 함수는 SplObjectStorage 객체에 저장된 특정 오브젝트를 삭제합니다.
$storage->offsetUnset($obj1);
- 이때의 결과는 $obj1이 삭제된 상태가 됩니다. 하지만 $storage 객체 내에서 $obj1이 삭제된 것을 알 수 없습니다.
$storage->offsetUnset($obj2);
- 이때의 결과는 $obj2가 삭제된 상태가 됩니다. 하지만 $storage 객체 내에서 $obj2이 삭제된 것을 알 수 없습니다.
print_r($storage);
- 이때의 결과는 SplObjectStorage 객체 내에 저장된 오브젝트가 모두 삭제된 것으로 보이지만, 실제로는 삭제된 오브젝트는 삭제된 상태이지만 SplObjectStorage 객체 내에서 삭제된 것을 알 수 없습니다.
SplObjectStorage::offsetUnset() 함수를 사용하여 오브젝트를 삭제하려면, 삭제된 오브젝트가 삭제된 것을 확인하기 위해 SplObjectStorage::detach() 함수를 사용하여 삭제된 오브젝트를 확인해야 합니다.
예를 들어, 아래와 같이 사용할 수 있습니다.
php
$storage = new SplObjectStorage();
$obj1 = new stdClass();
$obj2 = new stdClass();
$storage->attach($obj1);
$storage->attach($obj2);
$storage->offsetUnset($obj1);
$storage->offsetUnset($obj2);
print_r($storage);
// 삭제된 오브젝트를 확인하기 위해 detach() 함수를 사용합니다.
foreach ($storage as $obj) {
echo "삭제되지 않은 오브젝트: " . get_class($obj) . "n";
}
2025-04-15 11:24