Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
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 (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) ]

Polecam artykuły na www.objectmentor.com , powinny pomóc (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) )
Go to the top of the page
+Quote Post

Posty w temacie
- Bieniasxyz   Pytanie o obiekty   17.04.2004, 18:08:27
- - marcin96   Re: Pytanie o obiekty   17.04.2004, 18:24:49
- - halfik   Re: Pytanie o obiekty   17.04.2004, 18:43:56


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 15:23