Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zmienne w obrębie klasy kontra odwołania static ::
Forum PHP.pl > Forum > PHP > Object-oriented programming
zephyr7
Mam główną klasę CORE, a w niej zmienną URI.

Do wszystkich metod odwołuję się przez klasa::metoda();

Jak przypisać zmiennej URI w klasie CORE jakąś wartość, np. łańcuch "abcd" ?

i jak taką zmienną odczytać?

na przykład: core:$uri="abcd";

ale jak to ustrojstwo odczytać?


z góry przepraszam za moją ignorancję w temacie, zwykle pracowałem na kilku klasach ze zmiennymi globalnymi, gdzie zasięg zmiennych nie był takim problemem.

Teraz chciałbym poznać trochę OOP w PHP5

z góry wielkie dzięki za pomoc!
Athlan
Jeżeli jest to zmienna publiczna i statyczna, możesz się do niej odwoływać w sposób następujący:

  1. class core
  2. {
  3. public static $a = '';
  4. }
  5.  
  6. core::$a = 'aa';
  7. var_dump(core::$a);
zephyr7
Właśnie tego szukałem smile.gif

Przeglądałem pliki frameworka FatFree i znalazłem tam coś podobnego

protected static

Jaki jest zasięg takiej zmiennej? Tylko w obrębie jednej klasy?

Przyznam się, że mam mały mętlik w głowie...


Niektóre programy używają klas i tworzonych obiektów (metodami w stylu $db=new db;), a do metod odwołują się np. przez $this->db->get();

a inne korzystają z ::, np. db::get();

Które "podejście" jest właściwe?

Chodzi mi o to, że dotychczas posługiwałem się deklarowanymi klasami $gdzieśtam->cośtam

nowe (dla mnie) wzorce pracy z klasami w PHP strasznie mi się podobają,

do tego stopnia, że znacznie wygodniej pracować mi ze zmiennymi public static, niż z tworzonymi obiektami....

tylko czy takie podejście nie jest przypadkiem mało profesjonalne?

Athlan
Tylko w obrębie klasy oraz tych, które po niej dziedziczą. Jeżeli nie chcesz, żeby dzieci dziedziczące po tej klasie nie miały dostępu do zmiennej, użyj private zamiast protected. Na zewnątrz tylko public. Oczywiście public jest niezalecane, lepiej walidować, rzutować etc., możesz mieć śmieci w klasie.

A jeżeli chcesz już używać zmiennych publicznie, składuj je w prywatnej tablicy, która jest sterowana metodami magicznymi __get i __set. Kiedyś pisałem klasę, po której często dziedziczę:
http://athlan.pl/code/Attribute.Class

Co czego się przyda? Ano do wszystkiego.
http://athlan.pl/code/Tagcloud.Class

Grunt, żeby zmienne które nie są protected $_aAttributes = array(); nie były widoczne na zewnątrz.
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.