라이브러리

[PHP] WeakMap::getIterator - 외부 반복자 검색




WeakMap::getIterator

PHP 7.4 버전부터 WeakMap 클래스가 추가되었습니다. WeakMap은 키-값 쌍을 저장하는 자료구조로, 키가 객체일 때 유용합니다. WeakMap::getIterator 메서드는 WeakMap 객체에서 반복 가능한 이터레이터를 반환합니다.

WeakMap::getIterator 사용법

WeakMap::getIterator 메서드는 다음과 같이 사용할 수 있습니다.

#hostingforum.kr
php

$weakMap = new WeakMap();

$weakMap['key1'] = 'value1';

$weakMap['key2'] = 'value2';



$iterator = $weakMap->getIterator();

foreach ($iterator as $key => $value) {

    echo "$key => $value
";

}



WeakMap::getIterator 예제

다음 예제에서는 WeakMap::getIterator를 사용하여 WeakMap 객체의 키-값 쌍을 반복적으로 접근하는 방법을 보여줍니다.

#hostingforum.kr
php

class Person {

    public $name;

    public $age;



    public function __construct($name, $age) {

        $this->name = $name;

        $this->age = $age;

    }

}



$weakMap = new WeakMap();



$person1 = new Person('John', 30);

$person2 = new Person('Jane', 25);



$weakMap[$person1] = 'value1';

$weakMap[$person2] = 'value2';



$iterator = $weakMap->getIterator();



foreach ($iterator as $key => $value) {

    if ($key instanceof Person) {

        echo "이름: {$key->name}, 나이: {$key->age}
";

    } else {

        echo "키: $key, 값: $value
";

    }

}



WeakMap::getIterator와 GC

WeakMap::getIterator는 WeakMap 객체의 키-값 쌍을 반복적으로 접근할 수 있지만, 이터레이터는 WeakMap 객체의 키를 참조하지 않습니다. 따라서 WeakMap 객체의 키가 가비지 컬렉션(GC) 대상이 된 경우, 이터레이터는 키를 참조할 수 없게 됩니다.

#hostingforum.kr
php

$weakMap = new WeakMap();

$person = new Person('John', 30);

$weakMap[$person] = 'value1';



unset($person); // 키가 가비지 컬렉션 대상이 된 경우



$iterator = $weakMap->getIterator();

foreach ($iterator as $key => $value) {

    echo "$key => $value
";

}



위 예제에서는 $person 변수를 unset하여 키가 가비지 컬렉션 대상이 되었습니다. 이 경우, 이터레이터는 키를 참조할 수 없게 됩니다.

WeakMap::getIterator와 이터레이터의 종료

WeakMap::getIterator는 반복 가능한 이터레이터를 반환합니다. 이터레이터는 반복문이 종료되면 종료됩니다.

#hostingforum.kr
php

$weakMap = new WeakMap();

$weakMap['key1'] = 'value1';

$weakMap['key2'] = 'value2';



$iterator = $weakMap->getIterator();

foreach ($iterator as $key => $value) {

    echo "$key => $value
";

}



// 이터레이터는 종료되어 사용할 수 없습니다.

// foreach ($iterator as $key => $value) {

//     echo "$key => $value
";

// }



위 예제에서는 이터레이터가 반복문이 종료되면 종료됩니다. 이터레이터를 다시 사용하려면 새로운 이터레이터를 생성해야 합니다.

WeakMap::getIterator와 이터레이터의 복사

WeakMap::getIterator는 이터레이터를 복사할 수 없습니다. 이터레이터는 WeakMap 객체의 키를 참조하지 않기 때문입니다.

#hostingforum.kr
php

$weakMap = new WeakMap();

$weakMap['key1'] = 'value1';

$weakMap['key2'] = 'value2';



$iterator = $weakMap->getIterator();

$iteratorCopy = $iterator; // 이터레이터를 복사할 수 없습니다.



// foreach ($iteratorCopy as $key => $value) {

//     echo "$key => $value
";

// }



위 예제에서는 이터레이터를 복사할 수 없습니다. 이터레이터를 복사하려면 새로운 이터레이터를 생성해야 합니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 8,985건 / 44 페이지

검색

게시물 검색