Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP5: Zmiana wlasciwosci (zmienne obiektowe), Zmiana wlasciwosci glownego obiektu z klasy rozszerzonej...
mxm
post 11.11.2006, 13:05:23
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


  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
Go to the top of the page
+Quote Post
Cysiaczek
post 11.11.2006, 13:18:11
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
mxm
post 11.11.2006, 13:50:38
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


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
Go to the top of the page
+Quote Post
dr_bonzo
post 11.11.2006, 13:55:02
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


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)


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
mxm
post 11.11.2006, 16:25:35
Post #5





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


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?
Go to the top of the page
+Quote Post
Cysiaczek
post 11.11.2006, 16:41:56
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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. ?>


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
mxm
post 11.11.2006, 17:08:41
Post #7





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 9.06.2005

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


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!!!

Ten post edytował mxm 11.11.2006, 17:11:11
Go to the top of the page
+Quote Post
Cysiaczek
post 11.11.2006, 17:28:14
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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 think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
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: 15.06.2025 - 09:50