Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zwracanie i dostęp do wartości metody
Forum PHP.pl > Forum > PHP > Object-oriented programming
cadavre
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.
mysz
Uczyń metodę
Kod
class_one::dodaj()
i właściwość
Kod
class_one::$licznik
statycznymi.
cadavre
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??
mysz
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 :)
Cysiaczek
Odpowiedzią na Twój problem jest singleton

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