Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z klasą kolekcji
Forum PHP.pl > Forum > PHP > Object-oriented programming
marcinpruciak
Robię sobie klasę kolekcji z książki PHP5 ZP.

Wszystko prawie działa, ale wyskakuje błąd o nadpisaniu klucza.

Kod wygląda tak:

StudentFaktory
  1. public static function getStudent($id){
  2. $sql = "SELECT * FROM student WHERE student_id= '$id'";
  3. $query= mysql_query($sql, self::_getConnection());
  4. $data = mysql_fetch_array($query);
  5.  
  6. if(is_array($data) && sizeof($data)){
  7. return new Student($data['student_id'], $data['nazwa']);
  8. }else{
  9. throw new Exception("Student $id nie istnieje");
  10. }
  11. }
  12.  
  13. public static function getCoursesForStudent($id, $col){
  14. $sql = "SELECT kurs.kurs_id, kurs.kurs_kod, kurs.nazwa FROM kurs, student_kurs WHERE kurs.kurs_id = student_kurs.kurs_id AND student_kurs.student_id = '$id'";
  15. $query = mysql_query($sql);
  16. $data = mysql_fetch_assoc($query);
  17. echo '<pre>';print_r($data);echo '</pre>';
  18.  
  19. if(is_array($data) && sizeof($data)){
  20. foreach ($data as $key => $datum){
  21. $objCourse = new Course($datum['kurs_id'], $datum['kurs_kod'], $datum['nazwa']);
  22. $col->addItem($objCourse, $objCourse->getCourseCode());
  23. //echo '<pre>';print_r($col);echo '</pre>';
  24. }
  25. }
  26. }



CourseClass
  1. class Course {
  2. private $_id;
  3. private $_courseCode;
  4. private $_name;
  5.  
  6. public $students;
  7.  
  8. function __construct($id, $courseCode, $name) {
  9. $this->_id = $id;
  10. $this->_courseCode = $courseCode;
  11. $this->_name = $name;
  12.  
  13. //$this->students = new Collection();
  14. //$this->students->setLoadCallback('_loadStudents', $this);
  15. }
  16.  
  17. public function getName(){
  18. return $this->_name;
  19. }
  20.  
  21. public function getID(){
  22. return $this->_id;
  23. }
  24.  
  25. public function getCourseCode(){
  26. return $this->_courseCode;
  27. }
  28.  
  29. public function __toString() {
  30. return $this->_name;
  31. }
  32. }



CollectionClass
  1. class Collection implements IteratorAggregate{
  2.  
  3. private $_members = array();
  4. private $_onload;
  5. private $_isLoaded = false;
  6.  
  7. public function addItem($obj, $key = null){
  8. $this->_checkCallback();
  9. if($key){
  10. if(isset($this->_members[$key])){
  11. throw new Exception("Klucz $key jest już zajęty");
  12. }else{
  13. $this->_members[$key] = $obj;
  14. echo '<pre>';print_r($this->_members);echo'</pre>';
  15. }
  16. }else{
  17. $this->_members[] = $obj;
  18. }
  19. }



Test
  1. $studentID = 1;
  2.  
  3. try{
  4. $objStudent = StudentFactory::getStudent($studentID);
  5. }catch (Exception $e){
  6. echo '<pre>';
  7. //print_r($e);
  8. echo '</pre>';
  9. die("Student #$studentID nie istnieje w bazie danych");
  10. }
  11.  
  12. print $objStudent.' '. ($objStudent->courses->exist('INF101') ? ' jest ' : 'nie jest'). ' zapisany na kurs ';




Gdzie może być problem?

cojack
Nie wiem gdzie, wczoraj wieczorem przepisałem sobie z książki tą klasę i nie miałem żadnych problemów, sprawdź czy masz wszystko dobrze, i sprawdź erate. może gdzieś się walneli, ale powtarzam, mi działa.

I btw dlaczego nie poprawiłeś po nich bloku try {} catch {} ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.