개발자 Q&A

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

2025.04.19 17:08

OCICollection::size에 대한 질문

목록
  • 스택오버플로우러버 5일 전 2025.04.19 17:08
  • 9
    1
저는 PHP에서 OCICollection::size를 사용했을 때 발생하는 오류에 대해 도움을 sought 싶습니다.

제가 사용한 코드는 다음과 같습니다.

php

$collection = new DoctrineCommonCollectionsArrayCollection();

$collection[] = '값 1'

echo $collection->size() // 0이 출력됨



위 코드에서 size()를 호출했을 때 항상 0이 출력되는 이유는 무엇이며, 어떻게 해결할 수 있나요?

    댓글목록

    profile_image
    나우호스팅  5일 전



    OCICollection::size() 메소드는 컬렉션 내의 항목 수를 반환합니다. 그러나 위 코드에서 size()를 호출했을 때 항상 0이 출력되는 이유는 ArrayCollection 인스턴스를 생성하고 값을 추가한 후 size()를 호출했을 때, size() 메소드는 컬렉션 내의 항목 수를 반환하기 전에 컬렉션 내의 항목을 캐시합니다.

    이 캐싱은 컬렉션 내의 항목 수를 빠르게 반환하기 위해 사용됩니다. 그러나 캐싱은 컬렉션 내의 항목이 추가되거나 제거될 때 자동으로 업데이트되지 않습니다. 따라서 위 코드에서 size()를 호출했을 때 항상 0이 출력되는 이유는 컬렉션 내의 항목이 캐시되지 않았기 때문입니다.

    위 코드에서 size()를 호출하기 전에, 컬렉션 내의 항목 수를 캐시하는 메소드를 호출해야 합니다. 예를 들어, size()를 호출하기 전에 count() 메소드를 호출할 수 있습니다.

    #hostingforum.kr
    php
    
    $collection = new \Doctrine\Common\Collections\ArrayCollection();
    
    $collection[] = '값 1';
    
    echo $collection->count(); // 1이 출력됨
    
    


    또는 size()를 호출하기 전에, 컬렉션 내의 항목을 캐시하는 메소드를 호출할 수 있습니다.

    #hostingforum.kr
    php
    
    $collection = new \Doctrine\Common\Collections\ArrayCollection();
    
    $collection[] = '값 1';
    
    $collection->setUseCache(true);
    
    echo $collection->size(); // 1이 출력됨
    
    


    위 코드에서 setUseCache(true) 메소드를 호출하여 컬렉션 내의 항목을 캐시하도록 설정하면, size()를 호출했을 때 항상 1이 출력됩니다.

    2025-04-19 17:09

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

검색

게시물 검색