![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 10.12.2003 Skąd: Halinów Ostrzeżenie: (0%) ![]() ![]() |
Mam takie obiekty php:
[php:1:3265d5d912] <?php class Pod1 { var $a; var $b; ... # i tak dalej metoda1() {} metoda2() {} metoda3() {} ... # i tak dalej } class Pod2 { var $a; var $b; ... # i tak dalej metoda1() {} metoda2() {} metoda3() {} ... # i tak dalej } class Jeden { var $a; var $b; function jeden() { $this->a=new Pod1(); $this->b=new Pod2(); } } ?> [/php:1:3265d5d912] 1. Teraz mam pewne pytanie. Czy taki zapis jest poprawny z punktu widzenia programowania obiektowego(2 ostatnie linijki) :?: Zaznaczam też iż kod ten chodzi u mnie na localhoście [php:1:3265d5d912] $obiekt=new Jeden(); $obiekt->jeden(); $obiekt->a->metoda1(); $obiekt->b->metoda3(); [/php:1:3265d5d912] Od razu zaznaczam, że użycie tutaj dziedziczenia nie wchodzi w grę(mniejsza o powody) 2. Czy takie wywołanie w obiekcie jest poprawne(chodzi o użycie zmiennej GLOBAL): [php:1:3265d5d912] <?php ... /*Tutaj mamy deklarację obiektu, ustawianie atrybutów i metod */ function metodax($text) { echo $text; } function metoday() { #coś tu się robi $this->metodax($GLOBAL['a']['b']['c']); } ... /* koniec obiektu */ ?> [/php:1:3265d5d912] -------------------- Jam dzieło wielkiej, sprawiedliwej ręki.
Wzniosła mnie z gruntu Potęga wczechwłodna, Mądrość najwyższa, Miłość pierwotna; Starsze ode mnie twory nie istnieją, |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 57 Pomógł: 0 Dołączył: 21.08.2003 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mam takie obiekty php:
[..] 1. Teraz mam pewne pytanie. Czy taki zapis jest poprawny z punktu widzenia programowania obiektowego(2 ostatnie linijki) :?: Zaznaczam też iż kod ten chodzi u mnie na localhoście [php:1:3c4b3e0239] $obiekt=new Jeden(); $obiekt->jeden(); $obiekt->a->metoda1(); $obiekt->b->metoda3(); [/php:1:3c4b3e0239] Od razu zaznaczam, że użycie tutaj dziedziczenia nie wchodzi w grę(mniejsza o powody) Nie korzystaj w ten sposób z instancji $obiekt->a oraz $obiekt->b . Zrób sobie jakieś metody w klasie Jeden do wywoływania odpowiednich metod obiektów a i b. Dlaczego? Wystarczy, że za jakiś czas będziesz chciał zmienić sposób implementacji różnych funkcji w klasie Jeden.. i jeśli zniknie przy tej okazji jeden z obiektów a, lub b.. albo jeśli zmienisz choćby nazwę, to będziesz też musiał zmieniać wszystkie elementy kodu Twojej aplikacji, gdzie są używane obiekty $obiekt->a i $obiekt->b A jeżeli zrobisz tak, jak napisałem.. to wystarczy tylko, że wtedy zmienisz wnętrze owych metod i cała aplikacja nawet nie zauważy zmiany. Cytat 2. Czy takie wywołanie w obiekcie jest poprawne(chodzi o użycie zmiennej GLOBAL):
[..] Tutaj ten sam problem - co jak zechcesz zrezygnować z tych zmiennych globalnych? Albo zmienią się ich nazwy? Zrób tak: [php:1:3c4b3e0239]<?php ... /*Tutaj mamy deklarację obiektu, ustawianie atrybutów i metod */ function metodax($text) { echo $text; } function metoday($param) { #coś tu się robi $this->metodax($param); } ... /* koniec obiektu */ ?>[/php:1:3c4b3e0239] ...i teraz przy wywołaniu obiektu robisz: $obiekt->metoday($GLOBALS['a']['b']['c']); ..ale jeżeli chcesz być w pełni zgodny z zasadami OOP, to nie używaj w ogóle zmiennych globalnych ![]() Polecam artykuły na www.objectmentor.com , powinny pomóc ![]() -------------------- www.calek.info
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
Cytat Mam takie obiekty php:
To nie obiekty, ale klasy ![]() -------------------- ![]() "Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski) dev: gazeta.ie |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 06:50 |