Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziedziczenie klas wewnątrz klas
Forum PHP.pl > Forum > PHP > Object-oriented programming
Aztech
Chciałbym się dowiedzieć, czy w PHP5 da się zrobić coś co w językach obietkowych jest oczywiste (C++, object Pascal dla Delphi), tzn czy zmienne mogą dziedziczyć po klasach?

Napisałem cosik takiego: jest to bardziej idea niż kod, mam nadzieję, że to Wam rozświetli co mam na myśli.

  1. <?php
  2.  
  3.  
  4. // definiuje klasę potomka
  5. class TDziecko {
  6.  
  7. private $wiek=0;
  8.  
  9. private function ileLat() {
  10. return $this->wiek;
  11. }
  12. }
  13.  
  14. //definiuje klasę rodzica
  15. //rodzic może meić tylko 1 dziecko, dziecko powinno dziedziczyć po klasie TDziecko
  16.  
  17. class TRodzic {  
  18. private $dziecko extends TDziecko;
  19. private function potomstwo() {
  20. if ($this->dziecko->ileLat() != 0) return true; else return false;
  21. }
  22.  
  23. }
  24.  
  25. ?>
mike
1. Pascal jest jązykiem obiektowym? Pierwsze słyszę.
2. To co pokazałeś to jest (z tego co wiem) niemożliwe w żadnym języku programowania.
3. Tobie chyba chodzi o to żeby pole $dziecko klasy TRodzic było typu obiektowego, a dokładniej żeby było instancją klasy TDziecko.
Aztech
[OT] mode on
ad 1. Pascal nie, ale Object Pascal używany w Borladn Delphi tak.
ad 2. Z tego co mi wiadomo to w C++ pola prywatne mogą dziedziczyć po klasach, tzn pole wewnątrz klasy może mieć typ pochodzący od klasy.
[OT] mode off
ad 3. Dokładnie, tylko nie wiedzialem jak to ująć (nazwać) i nadal nie wiem jak to zrobić sad.gif
dr_bonzo
W php zmienne nie maja przypisanego typu na stale tak jak w C/Java/Pascal.

  1. <?php
  2. class TRodzic {       
  3. //...
  4. public function __construct()
  5. {
  6.    $this->dziecko = new TDziecko(); // dziecko bedzie obiektem klasy TDziecko
  7. }
  8.     private $dziecko; // tutaj chyba sie nie da "new TDziecko()", przynajmniej nigdy tak nie robilem
  9. }
  10.   
  11. ?>

o to chodzilo?

Cytat
ad 2. Z tego co mi wiadomo to w C++ pola prywatne mogą dziedziczyć po klasach, tzn pole wewnątrz klasy może mieć typ pochodzący od klasy.

Klase traktuj jak kazdy inny typ zmiennej, a obiekt jak kazda inna zmienna
Kod
class Klasa
{
private:
int liczbaCzegostam;
TDziecko dziecko;
}
Aztech
@dr_bonzo: tak o to (przynajmniej tak wygląda, rano sprawdzę, jak to działa w praktyce, a teraz czas spać biggrin.gif)
mike
To może ty zamiast sprawdzić czy to działa poczytaj najpierw co to jest dziedziczenie, co oznacza że zmienna jest jakiegoś typu, ...

Bo używasz pojęć mieszając je bez sensu. I wychodzą głupoty.

Pole klasy nie dziedziczy - pole jest jakiegoś typu. Może to być w szczególności typ obiektowy.
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.