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

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: 11.10.2025 - 18:15