Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stała w klasie bazowej nadpisana przez klasę pochodną
Forum PHP.pl > Forum > PHP > Object-oriented programming
markac
  1. <?php
  2. class A {
  3.  const S = 'a';
  4. }
  5.  
  6. class B extends A {
  7.  const S = 'b';
  8. }
  9. ?>


Czy to jest normalne, że klasa B nadpisuje stałą z klasy A?
mike
A czemu miałoby to być nienormalne?
markac
Bo to stała, której nie można przedefiniować, więc i chyba nadpisać?
l0ud
Ale przecież, gdy dziedziczysz od innej klasy, ta stała jeszcze nie istnieje. Tworzy się dopiero wraz z utworzeniem instancji obiektu...
mike
A nie lepiej zamiast "chybać" i "gbybać" sprawdzić samemu? tongue.gif
  1. <?php
  2. class A {
  3.    const S = 'a';
  4.  
  5.    public function s() {
  6.        return self::S;
  7.    }
  8. }
  9.  
  10. class B extends A {
  11.    const S = 'b';
  12.  
  13.    public function s() {
  14.        return self::S;
  15.    }
  16. }
  17.  
  18. var_dump(A::S);
  19. var_dump(B::S);
  20.  
  21. $a = new A();
  22. $b = new B();
  23.  
  24. var_dump($a->s());
  25. var_dump($b->s());
  26.  
  27. ?>


Cytat(l0ud @ 11.11.2008, 10:54:49 ) *
Ale przecież, gdy dziedziczysz od innej klasy, ta stała jeszcze nie istnieje. Tworzy się dopiero wraz z utworzeniem instancji obiektu...
Chcesz wylądować na Homorze z tym postem? Brednie.
  1. <?php
  2.  
  3. var_dump(A::S);
  4.  
  5. ?>
Gdzie tu masz tworzenie obiektu?
Stała klasy to stała klasy i nie ma nic wspólnego z instancją klasy. I nie ma czegoś takiego jak "instancja obiektu".
markac
Oczywiście, że sprawdziłem. Zapomniałem tylko dodać, że klasa bazowa jest klasą abstrakcyjną, ale niewiele to tu zmienia. To, że nie ma instancji klasy, to niczego nie zmienia. Błędy wyłapywane są na poziomie interpretacji kodu, ale jeśli mówicie, że to jest w porządku to ok. Mnie zaskoczyło smile.gif Rozumiem, że metody i właściwości są domyślnie wirtualne, ale stałe... smile.gif Szkoda więc, że nie ma abstrakcyjnych stałych smile.gifsmile.gif
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.