개발자 Q&A

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

2025.04.07 15:09

SplObjectStorage::offsetUnset() 함수에 대한 질문

목록
  • 패턴마스터 1일 전 2025.04.07 15:09
  • 1
    1
제가 SplObjectStorage 클래스를 사용하여 객체를 저장하고 삭제하는 중인데, offsetUnset() 함수를 사용하여 삭제할 때 발생하는 오류에 대해 질문드립니다.

제가 offsetUnset() 함수를 사용하여 삭제하고자 하는 객체의 key를 전달했지만, 실제로 삭제가 이루어지지 않고 오류가 발생합니다. offsetUnset() 함수의 사용법에 대해 알려주시면 감사하겠습니다.

다음과 같은 코드를 작성하여 삭제를 시도했지만, 오류가 발생합니다.

php

$storage = new SplObjectStorage();

$storage->attach(new stdClass());



$storage->offsetUnset($storage->key($storage->current()));



offsetUnset() 함수의 올바른 사용법과 삭제가 이루어지지 않는 이유를 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    offsetUnset() 함수는 SplObjectStorage 객체에서 특정 키에 해당하는 값을 삭제하는 함수입니다.

    이 함수를 사용하려면 SplObjectStorage 객체의 current() 함수를 사용하여 현재 객체의 키를 얻어야 합니다.

    그 후에, offsetUnset() 함수에 키를 전달하여 삭제를 시도합니다.

    하지만, offsetUnset() 함수는 SplObjectStorage 객체의 내부 포인터를 이동시키지 않습니다.

    따라서, offsetUnset() 함수를 호출한 후, SplObjectStorage 객체의 내부 포인터를 이동시켜야 합니다.

    이것을 위해, SplObjectStorage 객체의 rewind() 함수를 사용하여 내부 포인터를 처음으로 이동시킬 수 있습니다.

    또는, SplObjectStorage 객체의 next() 함수를 사용하여 내부 포인터를 다음 객체로 이동시킬 수 있습니다.

    다음은 올바른 사용법을 보여주는 예제입니다.

    #hostingforum.kr
    php
    
    $storage = new SplObjectStorage();
    
    $storage->attach(new stdClass());
    
    $storage->attach(new stdClass());
    
    
    
    $storage->rewind(); // 내부 포인터를 처음으로 이동시킵니다.
    
    $storage->offsetUnset($storage->current()); // 현재 객체를 삭제합니다.
    
    $storage->next(); // 내부 포인터를 다음 객체로 이동시킵니다.
    
    $storage->offsetUnset($storage->current()); // 현재 객체를 삭제합니다.
    
    


    또는, 다음 예제를 사용할 수 있습니다.

    #hostingforum.kr
    php
    
    $storage = new SplObjectStorage();
    
    $storage->attach(new stdClass());
    
    $storage->attach(new stdClass());
    
    
    
    $storage->rewind(); // 내부 포인터를 처음으로 이동시킵니다.
    
    while ($storage->valid()) {
    
        $storage->offsetUnset($storage->current()); // 현재 객체를 삭제합니다.
    
        $storage->next(); // 내부 포인터를 다음 객체로 이동시킵니다.
    
    }
    
    


    이러한 방법으로, offsetUnset() 함수를 올바르게 사용하여 SplObjectStorage 객체에서 객체를 삭제할 수 있습니다.

    2025-04-07 15:10

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

검색

게시물 검색