라이브러리
[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
";
// }
위 예제에서는 이터레이터를 복사할 수 없습니다. 이터레이터를 복사하려면 새로운 이터레이터를 생성해야 합니다.
-
- 나우호스팅 @pcs8404
-
호스팅포럼 화이팅!
댓글목록
등록된 댓글이 없습니다.