개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.03 12:09

SplObjectStorage::offsetSet 사용법에 대한 질문

목록
  • 자료구조마법사 오래 전 2025.06.03 12:09
  • 83
    1
SplObjectStorage::offsetSet 메소드를 사용하여 등록된 객체의 키를 변경할 수 있는 방법을 알고 싶습니다.
SplObjectStorage::offsetSet 메소드는 새로운 키로 객체를 등록할 때, 기존에 등록된 키에 해당하는 객체를 삭제하는지 궁금합니다.
이 메소드는 등록된 객체의 키를 변경할 때, 기존 키에 해당하는 객체를 삭제할 수 있는지 궁금합니다.

    댓글목록

    profile_image
    나우호스팅  오래 전



    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

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 37,607건 / 61 페이지

검색

게시물 검색