Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zwracanie i dostęp do wartości metody
cadavre
post
Post #1





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Mam taką sobie przykładową konstrukcję:

Plik klasa1.php:
  1. <?php
  2. class class_one {
  3. public $licznik = 1;
  4. function dodaj () {
  5. $this->licznik++;
  6. }
  7. }
  8. ?>


Plik klasa2.php:
  1. <?php
  2. class class_two extends class_one {
  3. function robcos () {
  4. echo "dodaję";
  5. class_one::licznik++;
  6. }
  7. }
  8. ?>


Plik inkluder.php:
  1. <?php
  2. include("class_one.php");
  3. include("class_two.php");
  4. $klasa = new class_one;
  5. $klasa->licznik++;
  6. ?>


Tak miałoby to z założenia wyglądać. Mamy plik z klasą, która zawiera zmienną $licznik. Chcę móc z dowolnego miejsca: czy to z klasy rodzimej czy z extendowanej (nie koniecznie extends musi być, po prostu nie wiem co) czy z pliku do którego inkluduję - móc zwiększać wartość $licznik. Jestem początkującym w OOP i nie bardzo wiem jak zrobić by z dowolnego odwołania zwiększyć licznik.

Ten post edytował cadavre 4.12.2006, 22:16:21


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mysz
post
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 26.08.2006
Skąd: Szczecin

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


Uczyń metodę
Kod
class_one::dodaj()
i właściwość
Kod
class_one::$licznik
statycznymi.


--------------------
urzenia.net
Go to the top of the page
+Quote Post
cadavre
post
Post #3





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Mam coś takiego:

  1. <?php
  2.  
  3. class class_one {
  4.  
  5. static public $licznik = 1;
  6.  
  7. static function dodaj () {
  8. class_one::$licznik++;
  9. }
  10.  
  11. }
  12.  
  13. class class_two extends class_one {
  14.  
  15. function robcos () {
  16. class_one::$licznik++;
  17. }
  18.  
  19. }
  20.  
  21. $klasa = new class_one;
  22. $klasa->dodaj();
  23.  
  24. $klasax = new class_two;
  25. $klasax->robcos();
  26.  
  27. echo $klasa->licznik;
  28.  
  29. ?>


To nie działa.

Zamysł jest taki: mam klasę, która obsługuje bazę danych i wywołanie query przez tą klasę powoduje zwiększenie licznika zapytań o 1. Potrzebuję jednak w innych klasach wykorzystać klasę obsługi baz danych. Jak zrobić by mieć dostęp do tegoż licznika z klas, które używają tej do obsługi oraz z samego skryptu, w którym tworzę obiekt bazy danych??

Ten post edytował cadavre 4.12.2006, 22:07:25


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
mysz
post
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 26.08.2006
Skąd: Szczecin

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


Jeśli się odnosisz w klasie do siebie samej, to jest słowo kluczowe
Kod
self

Jeśli do rodzica, to jest słowo kluczowe
Kod
parent

Jeśli tworzysz metodę dostępu do jakiejś zmiennej, to uczyń ją prywatną
Kod
private

Jeśli nie jest wymagane z jakichś względów inaczej, używaj raczej
Kod
preinkrementacji
niż
Kod
postinkrementacji

Jeśli masz metodę do operacji na jakiejś właściwości, to używaj ich zamiast bezpośredniego dostępu do właściwości.
Używaj error_reporting ustawione na E_ALL.

Co do szczegółów: przeczytaj najpierw uważnie rozdział o obiektówce w PHP5: http://pl2.php.net/manual/en/language.oop5.php. Znajdziesz tam rozwiązanie, i dużo, dużo innych ciekawych informacji na podobne tematy :)


--------------------
urzenia.net
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #5





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




Odpowiedzią na Twój problem jest singleton

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
LBO
post
Post #6





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


Cytat(cadavre @ 4.12.2006, 22:06:51 ) *
To nie działa.

Zamień
  1. <?php
  2. echo $klasa->licznik;
  3. ?>

na
  1. <?php
  2. echo class_one::$licznik;
  3. ?>

A o to bardziej rozbudowany przykład:
  1. <?php
  2. class ClassA
  3. {
  4. static public $counter = 0;
  5.  
  6. public function incrementA()
  7. {
  8. self::$counter++;
  9. }
  10. }
  11.  
  12. class ClassB extends ClassA
  13. {
  14. public function incrementB()
  15. {
  16. parent::$counter++;
  17. }
  18. }
  19.  
  20. $a = new ClassA();
  21. $b = new ClassB();
  22. $a->incrementA();
  23. print ClassA::$counter; // 1
  24. $a->incrementA();
  25. print ClassA::$counter; // 2
  26.  
  27. $b = new ClassB();
  28. $b->incrementB();
  29. print ClassB::$counter; // 3
  30.  
  31. $a->incrementA();
  32. print ClassB::$counter; // 4
  33. ?>
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 Aktualny czas: 22.08.2025 - 11:14