Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pytanie o obiekty
Forum PHP.pl > Forum > PHP
Bieniasxyz
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]
marcin96
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)
halfik
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...
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.