Closed
Description
안녕하세요 별로 중요한 내용은 아닌 것 같지만
해보다가 의문이 생겨서 질문 드립니다.
일단 코드 전체는 이렇습니다.
-------------memberclass.php-------------------------
<?php
class Member{
private $id;
public function __construct($id) {
$this->setID($id);
}
public function getID(){
return $this->id;
}
}
class Members implements IteratorAggregate{
private $members = [];
public function add(Member $member){
$this->members[] = $member;
}
public function getIterator(){
return new ArrayIterator($this->members);
}
}
?>
------------------------iterator.phph-------------------------
<?php
require_once 'memberclass.php';
$member1 = new Member(1);
$members = new Members;
$members->add($member1);
$iterator = $members->getIterator();
foreach($iterator as $member){
print $member->getID()." ";
}
?>
그리고 제 질문을 드리겠습니다. 일단
$arr = [];
와 같은 배열이 있다고 합시다.
그리고
$num1 = 1;
$num2 = 2;
와 같이 선언된 변수가 있습니다.
여기에
$arr[] = $num1;
$arr[] = $num2;
와 같이 작성하면 배열 arr[0]과 arr[1]에 각각 1과 2가 들어갈 것입니다.
그리고
$arr = $num1;
$arr = $num2;
와 같이 작성하면 마지막에 대입한 $num2만 배열 arr에 들어가지요?
아마 배열 이름에 []를 붙이지 않으면 자동으로 배열이름[0]을 뜻하는 것 같아 보입니다.
그리고 count($arr)로 길이를 확인해 보면 1이 나옵니다.
그런데
제가 올린 코드에서
class Members implements IteratorAggregate{
private $members = [];
public function add(Member $member){
---->> $this->members = $member; // $this->members[]를 $this->members 로 잘못 작성한 것입니다.
}
public function getIterator(){
return new ArrayIterator($this->members);
}
}
와 같이 실수로 작성해 놓았을 경우
앞에서와 같이
적어도 members[0]에 $member1의 데이터가 들어가야 하는 것이 아닌가 싶은데요
일단 데이터는 들어 가는 것 같은데
members배열을 반환받은 $iterator의 길이를
count($iterator)
와 같이 확인해보면 0으로 나옵니다
그런데
print_r($iterator)
으로 확인해 보면 일단 데이터는 들어가 있습니다.
그런데 또
foreach($iterator as $member){
print $member->getID()." ";
}
와 같이 데이터를 확인하려고 하면 아무것도 출력하지 못하네요
왜 이런일이 생기는건가요?