JHiscock Posted March 5, 2008 Share Posted March 5, 2008 I posted this originally in the General PHP Help forum, but was directed to here instead. Hi, I'm pretty new to PHP programming, I come from java and I'm trying to do some stuff with OOP. For now I'm trying to create an array of classes, then loop through them printing their values with a foreach loop. My code is as follows: class Answer { private $answerClass; private $answerText; private $answerURL; public function __construct($class, $text, $url) { $this->answerClass = $class; $this->answerText = $text; $this->answerURL = $url; } public function getClass() { return $this->answerClass; } public function getText() { return $this->answerText; } public function getURL() { return $this->answerURL; } } $answerOne = new Answer("Left", "Left", "http://www.google.com"); $answerTwo = new Answer("Right", "Right", "http://www.google.com"); $allAnswers = array(); $allAnswers[] = $answerOne; $allAnswers[] = $answerTwo; foreach ($allAnswers as $answer); { echo ($answer->getClass() . " " . $answer->getText() . " " . $answer->getURL()); } My expectation is that this would output: Left Left http://www.google.com Right Righ thttp://www.google.com However it seems to only output: Right Right http:www.google.com I'm sure I'm doing something stupid here, and I spent about an hour last night going through tutorials etc trying to find out why but no luck. Could someone please explain what's going on? When I print a count($allAnswers) I get 2, which suggests to me I'm doing something wrong with the foreach... Thanks in advance. Link to comment https://forums.phpfreaks.com/topic/94400-arrays-of-objects-and-foreach/ Share on other sites More sharing options...
KrisNz Posted March 5, 2008 Share Posted March 5, 2008 It's due to the semicolon you have here... foreach ($allAnswers as $answer); { Remove that and all shall be well. Link to comment https://forums.phpfreaks.com/topic/94400-arrays-of-objects-and-foreach/#findComment-483498 Share on other sites More sharing options...
JHiscock Posted March 5, 2008 Author Share Posted March 5, 2008 Argh I knew it would be something like that.. Thankyou for picking that up! Link to comment https://forums.phpfreaks.com/topic/94400-arrays-of-objects-and-foreach/#findComment-483501 Share on other sites More sharing options...
aschk Posted March 5, 2008 Share Posted March 5, 2008 AH hah, my man you may wish to investigate the "Composite Pattern", which will teach you how to provide clusters of objects with similar functionality. I shall provide a simple sample below: Abstract answer <?php abstract class Answer_Abstract { public function addAnswer(Answer_Abstract $answer){ throw new Exception("Invalid function call"); } abstract public function getAnswer(); } ?> Concrete answer // i.e. concrete class with implemented functions <?php class Answer_Concrete extends Answer_Abstract { public function getAnswer(){ echo "i am an answer"; } } ?> Abstract Composite Answer // i.e. collection of answers // implements addAnswer() <?php abstract class Answer_Composite extends Answer_Abstract { protected $answers = array(); public function addAnswer(Answer_Abstract $answer){ array_push($this->answers, $answer); } } ?> Concrete implementation of our answers collection called "sheet" <?php class Answer_Sheet extends Answer_Composite { public function getAnswer(){ foreach($this->answers as $answer){ echo $answer->getAnswer(); } } } ?> Example code for usage. <?php $sheet = new Answer_Sheet(); $sheet->addAnswer(new Answer_Concrete()); $sheet->addAnswer(new Answer_Concrete()); $sheet->addAnswer(new Answer_Concrete()); $sheet->getAnswer(); ?> This may or may not help you, either way, i've made it available Link to comment https://forums.phpfreaks.com/topic/94400-arrays-of-objects-and-foreach/#findComment-483748 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.