Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP5: Zmiana wlasciwosci (zmienne obiektowe)
Forum PHP.pl > Forum > PHP > Object-oriented programming
mxm
  1. <?php
  2. class klasa1 {
  3. var $ID;
  4.  
  5. function klasa1() {
  6. $this->ID = 'wartosc1'; }
  7. }
  8.  
  9. class klasa2 extends klasa1 {
  10.  
  11. function klasa2() {
  12. $this->ID = 'wartosc2';
  13. $this->funkcja1(); }
  14.  
  15. function funkcja1() {
  16. $klasa1->ID = 'wartosc3'; }
  17. }
  18.  
  19. $obiekt1 = new klasa1();
  20. $obiekt2 = new klasa2();
  21.  
  22. echo 'Zmienna <b>$obiekt1</b>:'.$obiekt1->ID;
  23. echo '<br>Zmienna <b>$obiekt2</b>:'.$obiekt2->ID;
  24. ?>


Klasa1 ma zdefiniowana wlasciwosc ID. Klasa2 takze definiuje swoja wlasnosc dla swojej klasy. Natomiast funkcja ma za zadanie zmiany zmiennej w klasie nadrzenej (klasa1). Jednak to nie dziala. Jak mozna z obiektow podrzędnych zmieniac wlasciwosci zmiennych nadrzędnych?questionmark.gif
Cysiaczek
eeeee? To działa...?

Twoja właściwość ID jest przesłaniana w klasie pochodnej - to nie są dwie różne zmienne, tylko jedna.

Co to jest?
  1. <?php
  2. function funkcja1() {
  3. $klasa1->ID = 'wartosc3'; }
  4. ?>


Poczytaj troszkę więcej, np to: http://www.php.net/manual/pl/language.oop5...nekudotayim.php

Kolejna sprawa to słówko var - w php 5 nie powinno się go używać. Są za to public, protected i private.

Pozdrawiam.
mxm
Ten kod ktory przytoczyles to fukcja majaca zmieniac wlasciwosc zmiennej w klasie podstawowej. Czyli zamiast wyswietlac sie:
- wartosc1, wartosc2,
ma sie wyswietlac:
- wartosc3,wartosc2.

Chodzi o zastapenie zmiennej "wartosc1", innym ciagiem: "wartosc3".
Teraz rozumiesz o co mi chodzi?questionmark.gif
dr_bonzo
mxm:
obiektowka w php4 jest zje...psuta

Ty tworzysz dwa obiekty
  1. <?php
  2. $obiekt1 = new klasa1();
  3. $obiekt2 = new klasa2();
  4. ?>
,
ktore NIE wspoldziela zmiennej instancji $ID, bo to jest zmienna instancji -- kazdy OBIEKT ma swoja.
Gdyby to byla zmienna KLASY (inaczej: statyczna) to by ci zadzialalo --
  1. <?php
  2. class Rodzic
  3. {
  4. protected static $id;
  5. public function __construct() // konstruktor, odpowiednik Rodzic() w php4
  6. {
  7. self::$id = '1';
  8. }
  9.  
  10. public function printId()
  11. {
  12. print( self::$id . "<br />n" );
  13. }
  14. }
  15.  
  16. class Dziecko extends Rodzic
  17. {
  18. public function __construct() // konstruktor, odpowiednik Rodzic() w php4
  19. {
  20. self::$id = '2';
  21. }
  22. }
  23.  
  24. $r = new Rodzic();
  25. $r->printId(); // 1
  26. $d = new Dziecko();
  27. $d->printId(); // 2
  28.  
  29. $r->printId(); // 2 !!
  30. ?>

O taki efekt ci chodzilo?

Tylko nie wiem jak to w php4 zapisac :/ (patrz poczatek postu smile.gif

Doczytaj o roznicach miedzy Klasa a Obiektem (instancja Klasy)
mxm
O ten efekt chodzilo. Jednakze zmienna NIE MOZE BYC STATYCZNA. Chce z tej zmiennej zrobic tabele i tam z odpowiednich klas dodwac dane do takiej tabeli... Rozumiem ze nie da sie inaczej tak aby zmienna byla zmiannąquestionmark.gif?
Cysiaczek
Omg - manual naprawdę nie boli

  1. <?php
  2. class A{
  3. public $name='cysiaczek';
  4. }
  5.  
  6. class B extends A{
  7.  
  8. public function changeName(){
  9. $this->name='mxm';
  10. }
  11.  
  12. public function getName(){
  13. return $this->name;
  14. }
  15. }
  16.  
  17. $obiekt=new B();
  18. print $obiekt->getName();
  19. $obiekt->changeName();
  20. print $obiekt->getName();
  21. ?>
mxm
Cytat(Cysiaczek @ 11.11.2006, 16:41:56 ) *
Omg - manual naprawdę nie boli

Heh. tak to ja tez potrafie. Chodzi oto aby po zdefiniowaniu klasy C wzgledem klasy A mozna bylo dodac wyniki z klasy B do zmniennej z klasy A. Czyli zmienna z klasy A ma przechowywac dane z wynikow z klasy B, aby mozna bylo dodac dodatkowo wyniki z klasy C wlasnie do klasy A.

Czyli zmienna klasy A ma przechowywac zmienna:
$zmienna_klasy_A = $wynik_klasy_B.$wynik_klasy_C; <- mniej wiecej taki format jak zwykle php tylko na klasach. Na tym polega problem. Nie interesuje mnie zmiana zmiennej w tej samej klasie!!!
Cysiaczek
Cytat(mxm @ 11.11.2006, 17:08:41 ) *
Heh. tak to ja tez potrafie. Chodzi oto aby po zdefiniowaniu klasy C wzgledem klasy A mozna bylo dodac wyniki z klasy B do zmniennej z klasy A. Czyli zmienna z klasy A ma przechowywac dane z wynikow z klasy B, aby mozna bylo dodac dodatkowo wyniki z klasy C wlasnie do klasy A.

Czyli zmienna klasy A ma przechowywac zmienna:
$zmienna_klasy_A = $wynik_klasy_B.$wynik_klasy_C; <- mniej wiecej taki format jak zwykle php tylko na klasach. Na tym polega problem. Nie interesuje mnie zmiana zmiennej w tej samej klasie!!!


Przecież w takim razie do co napisał dr_bonzo to jedyne rozwiązanie jeśli w grę ma wchodzić dziedziczenie. Za każdym razem, gdy wyprowadzasz obiekt klasy B lub C wywołujesz jednocześnie obiekt klasy A. Za każdym razem jest to inny obiekt, więc twoja wartość ID jest wartością wyjściową. Istnieje jednakże możliwość zdefiniowania zmiennej statycznej, która jest zmienną klasy a NIE obiektu i można się do niej odwołać jedynie w kontekście klasy przez :: . Możesz zatem użyć tego i zmieniać wartości poprzez klasy pochodne. ufff

Pozdrawiam.
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-2024 Invision Power Services, Inc.