Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przeciążanie metod
Forum PHP.pl > Forum > PHP > Object-oriented programming
trylas
CourseCollection
  1. class CourseCollection extends Collection {
  2. public function addItem(Course $obj, $key = null) {
  3. parent::addItem($obj, $key);
  4. }
  5. }


  1. public function addItem($obj, $key = null) {
  2. $this->_checkCallback(); // _checkCallback zdefiniowano nieco później
  3. if ($key) {
  4. if (isset($this->_members[$key])) {
  5. echo "Klucz .$key. jest już zajęty!";
  6. } else {
  7. $this->_members[$key] = $obj;
  8. }
  9. } else {
  10. $this->_members[] = $obj;
  11. }
  12. }


Przeciążanie metody addItem powoduje wyrzucenie : Strict standards: Declaration of CourseCollection::addItem() should be compatible with Collection::addItem($obj, $key = NULL) in D:\netpub\r5\CourseCollection.php on line 7
Pytanie teraz w php nie ma przeciążania i co dalej jak to rozwiazac żeby do Collection był przekazany obiekt typu Course skoro przeciażanie sypie E_Strict'ami?
mortus
No cóż, trzeba samemu obsłużyć przypadek, gdy podana zmienna nie jest obiektem typu Course:
  1. public function addItem($obj, $key = null) {
  2. if(!$obj instanceof Course) {
  3. throw new SomeException('Parametr $obj nie jest obiektem klasy Course');
  4. }
  5. // reszta metody
  6. }

Zadziała prawie tak samo, a nawet lepiej, bo w tym przypadku to my decydujemy co ma się stać, jeśli przekazany obiekt nie będzie obiektem określonej klasy (w tym przypadku rzucam wyjątkiem SomeException). Wymuszanie typu ma to do siebie, że podanie nieprawidłowego parametru spowoduje fatal error i przerwanie skryptu.

Swoją drogą - skąd ta klasa Collection?
trylas
Zaawansowane programowanie PHP http://helion.pl/ksiazki/php5-zaawansowane...cove,php5zp.htm
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.