Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pytanie o obiekty
Bieniasxyz
post
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ą,
Go to the top of the page
+Quote Post
marcin96
post
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 snitch.gif]

Polecam artykuły na www.objectmentor.com , powinny pomóc snitch.gif)


--------------------
www.calek.info
Go to the top of the page
+Quote Post
halfik
post
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

Ostrzeżenie: (10%)
X----


Cytat
Mam takie obiekty php:


To nie obiekty, ale klasy winksmiley.jpg Widzisz, bo obiekt to instancja klasy. Klasa jest tylko definicją, pewną abstrakcyjną strukturą danych i sama w sobie nie jest obiektem. To tak jakbyś powiedział, że np. integer to zmienna...


--------------------


"Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski)
dev: gazeta.ie
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: 21.08.2025 - 06:50