デザインパターンというものを知り、中でもIteratorパターンを学習し始めました。
IteratorAggregateインターフェースを活用した下記のコード内で、
getIterator()を使って、わざわざ$this->membersをArrayIteratorでラップして返す目的がわかりません。
IteratorAggregateはインターフェースのため、getIterator()をオーバーライドしないといけないということはわかっているのですが、なぜわざわざそんなことをするのかがわかりません。
foreachも$iterator as $memberではなく$members as $memberで表示上は同じになりますし・・・。
Iteratorパターンの本質をわかっていないのでしょうか。
php
1<?php 2 3class Member{ 4 private $id; 5 private $lastname; 6 private $firstname; 7 private $email; 8 private $password; 9 10 public function __construct($id, $lastname, $firstname, $email, $password) 11 { 12 $this->setId($id); 13 $this->setLastname($lastname); 14 $this->setFirstname($firstname); 15 $this->setEmail($email); 16 $this->setPassword($password); 17 } 18 19 20 public function setId(int$id){ 21 $this->id = $id; 22 } 23 24 public function getId(){ 25 return $this->id; 26 } 27 28 public function setLastname($lastname){ 29 $this->lastname = $lastname; 30 } 31 32 public function getLastname(){ 33 return $this->lastname; 34 } 35 36 public function setFirstname($firstname){ 37 $this->firstname = $firstname; 38 } 39 40 public function getFirstname(){ 41 return $this->firstname; 42 } 43 44 public function setEmail($email){ 45 $this->email = $email; 46 } 47 48 public function getEmail(){ 49 return $this->email; 50 } 51 52 public function setPassword($password){ 53 $this->password = $password; 54 } 55 56 public function getPassword(){ 57 return $this->password; 58 }
php
1<?php 2 3class Members implements IteratorAggregate{ 4 private $members = []; 5 6 public function add(Member $member) 7 { 8 $this->members[] = $member; 9 } 10 11 public function getIterator() 12 { 13 return new ArrayIterator($this->members); 14 } 15}
php
1<?php 2 3require_once 'memberclass.php'; 4require_once 'membersclass.php'; 5 6//ダミーの会員データを作成 7$member1 = new Member(1, "姓1", "名1", "名1", "email1@example.com", "password1"); 8$member2 = new Member(2, "姓2", "名2", "名2", "email2@example.com", "password2"); 9$member3 = new Member(3, "姓3", "名3", "名3", "email3@example.com", "password3"); 10$member4 = new Member(4, "姓4", "名4", "名4", "email4@example.com", "password4"); 11$member5 = new Member(5, "姓5", "名5", "名5", "email5@example.com", "password5"); 12 13//Membersクラスに会員データを追加 14$members = new Members(); 15$members->add($member1); 16$members->add($member2); 17$members->add($member3); 18$members->add($member4); 19$members->add($member5); 20 21//getIteratorによりイテレーターを取得 22$iterator = $members->getIterator(); 23 24//ループ処理 25foreach ($iterator as $member){ 26 print $member->getId()." "; 27 print $member->getLastname()." "; 28 print $member->getFirstname()." "; 29 print $member->getEmail()." "; 30 print $member->getPassword()." "; 31}
回答1件
あなたの回答
tips
プレビュー