
SplObjectStorage::key 메서드는 객체를 키로 저장할 때, 동일한 객체를 여러 번 저장하더라도 첫 번째로 저장한 키를 반환합니다.
예를 들어, 다음 코드를 실행하면 `$storage->key($obj1)` 메서드는 `'key1'` 값을 반환합니다.
#hostingforum.kr
php
$storage = new SplObjectStorage();
$obj1 = new stdClass();
$obj2 = new stdClass();
$storage->attach($obj1, 'key1');
$storage->attach($obj2, 'key2');
$storage->attach($obj1, 'key3'); // 동일한 객체를 여러 번 저장하는 경우
echo $storage->key($obj1); // 'key1'을 출력합니다.
이러한 문제를 해결하려면, 객체를 키로 저장할 때 고유한 키를 할당하는 방법을 사용할 수 있습니다. 예를 들어, 다음 코드를 실행하면 `$storage->key($obj1)` 메서드는 `'key3'` 값을 반환합니다.
#hostingforum.kr
php
$storage = new SplObjectStorage();
$obj1 = new stdClass();
$obj2 = new stdClass();
$storage->attach($obj1, 'key1');
$storage->attach($obj2, 'key2');
$storage->attach($obj1, 'key3'); // 동일한 객체를 여러 번 저장하는 경우
echo $storage->key($obj1); // 'key3'을 출력합니다.
또는, 객체를 키로 저장할 때, 객체의 ID를 사용하는 방법을 사용할 수 있습니다. 예를 들어, 다음 코드를 실행하면 `$storage->key($obj1)` 메서드는 `$obj1`의 ID 값을 반환합니다.
#hostingforum.kr
php
$storage = new SplObjectStorage();
$obj1 = new stdClass();
$obj2 = new stdClass();
$storage->attach($obj1, spl_object_hash($obj1));
$storage->attach($obj2, spl_object_hash($obj2));
$storage->attach($obj1, spl_object_hash($obj1)); // 동일한 객체를 여러 번 저장하는 경우
echo $storage->key($obj1); // $obj1의 ID 값을 출력합니다.
2025-03-31 15:38