Cytat(IceManSpy @ 6.08.2011, 20:58:48 )

Jedną z zasad OOP (obiektówki) jest to, że pola nie mogą być publiczne.
Na pewno? Osobiście nie słyszałem o takiej zasadzie. Jak potrzebuje pola o zasięgu publicznym, to takie pole sobie tworzę.
Wracając do tematu. Zauważ, że pola w Twojej klasie Osoba są zadeklarowane jako prywatne:
class Osoba {
// ...
private $imie;
private $nazwisko;
private $wiek = 10;
private $plec = "M";
// ...
}
Oznacza to, że dostęp do tych pól mamy
tylko i wyłącznie w ciele tej klasy. Aby móc zatem wydobyć (lub ustawić) imię czy nazwisko potrzebujemy
metody publicznej, która będzie operować na polach prywatnych. U ciebie do tych metod należą: set_Imie(), get_Imie(), set_Nazwisko(), get_Nazwisko(). Przyjęło się nazywać te metody stosując angielskie przedrostki set i get na początku, ale równie dobrze mogłyby to być metody: ustaw_Imie(), pobierz_Imie(), ustaw_Nazwisko(), pobierz_Nazwisko(). Nazewnictwo ma tutaj "drugorzędne" znaczenie. Najważniejsze jest to, że
publiczne metody nazywane setterami i getterami służą odpowiednio do ustawiania i pobierania wartości
prywatnych pól klasy.
Jak się to wykorzystuje. Otóż zauważ, że tworząc nowy obiekt klasy Osoba nie tworzysz tak naprawdę osoby, a jedynie rezerwujesz w pamięci miejsce na dane tej osoby (przy czym domyślnie ma ona 10 lat i jest mężczyzną - jak każda inna osoba będąca obiektem Twojej klasy). Aby móc tę osobę lepiej identyfikować musisz ustawić jej imię i nazwisko. Do tego właśnie służą settery (metody klasy z przedrostkiem set) set_Imie() i set_Nazwisko(). Za pomocą getterów (metody klasy z przedrostkiem get) będziesz mógł natomiast te dane pobrać, kiedy będą Ci potrzebne. W tej chwili użycie tych
publicznych metod jest jedynym sposobem na to, aby
prywatnym polom klasy Osoba przypisać pewne wartości i jedynym sposobem na to, aby te wartości odczytać.
Złożenie "w tej chwili" zostało użyte celowo, bo alternatywą dla tak napisanych setterów i getterów może być przeciążenie domyślnych metod __set() i __get(). Ale o tym kiedy indziej.