Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przeciążanie metod, E_Strict
trylas
post 20.03.2013, 15:09:42
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 7.09.2008

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
viking
post 20.03.2013, 15:24:26
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


http://stackoverflow.com/questions/4697705...ion-overloading


--------------------
Go to the top of the page
+Quote Post
mortus
post 20.03.2013, 15:54:48
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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?

Ten post edytował mortus 20.03.2013, 15:57:22
Go to the top of the page
+Quote Post
trylas
post 20.03.2013, 15:59:39
Post #4





Grupa: Zarejestrowani
Postów: 53
Pomógł: 1
Dołączył: 7.09.2008

Ostrzeżenie: (0%)
-----


Zaawansowane programowanie PHP http://helion.pl/ksiazki/php5-zaawansowane...cove,php5zp.htm
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 21:19