Wpis z mikrobloga

#php
Po co w obiektowym programowaniu używa się private i protected? przeczytałem cały internet i dalej nie rozumiem po co one są. Z przykładów podanych w necie też nic nie rozumiem. według mnie wystarczy dać public na wszystko i będzie ok. mógłby ktoś jak dla bardzo początkującego wyjaśnić?
  • 6
  • Odpowiedz
dać public na wszystko i będzie ok


@massejferguson: Będzie dopóki tylko ty używasz własnego kodu. Jeśli taką klasę gdzieś upublicznisz (np. jako bibliotekę) to rozsądnie, aby z zewnątrz był dostęp tylko to pól/metod wymaganych do jej użycia.

To co robi sobie w środku nie powinno nikogo interesować – ktoś nieświadomy może zmienić jakąś wewnętrzną wartość albo wywołać funkcję, która nie była do tego przeznaczona.

Dodatkowo, jeśli używasz jakiegoś sensownego IDE,
  • Odpowiedz
@massejferguson: w mocnym skrócie:
public - ma dostęp każdy;
protected - ma dostęp każdy z klasy w której jest to oraz każdy kto po niej dzieczyczy;
private - dostęp tylko z wewnątrz klasy;

Jak widać, różnica jest w tym, że protected umożliwia dziedziczenie
  • Odpowiedz
Masz przykład - wrapper do połączenia do bazy danych. Ma on prywatną metodę executeRawQuery z argumentem query, która wykonuje zapytanie w bazie. Ma ona też publiczną metodę getEntity($type, int? $id), która szykuje odpowiednie query, bez żadnych bugów czy SQL injection i ona wywołuje executeRawQuery.

Dzięki temu masz zabezpieczenie, że nie wywołałasz jakiegoś głupiego query, które np. rozwali Ci bazę, bo nie masz walidacji danych wejściowych.
  • Odpowiedz
@massejferguson: Klasa powinna udostepniac wylacznie niezbedne zasoby. Nie wdajac sie w szegoly, metody protected stosujesz glownie w klasach abstrakcyjnych lub w klasach z zalozenia przeznaczonych do dziedziczenia. Typowa klasa powinna byc finalna i posiadac jedna, dwie metody publiczne z dopisanymi interfejsami, reszta private. W przypadku propertiesow, public stosowany jest glownie przy DTO w trybie readonly.
  • Odpowiedz