Skip to content

php 배열과 Iterator 패턴 질문입니다. #113

Closed
@dwagwa

Description

@dwagwa

안녕하세요 별로 중요한 내용은 아닌 것 같지만
해보다가 의문이 생겨서 질문 드립니다.
일단 코드 전체는 이렇습니다.

-------------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()." ";
    
  }

와 같이 데이터를 확인하려고 하면 아무것도 출력하지 못하네요

왜 이런일이 생기는건가요?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions