Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki PHP

class Dane { public $a; private $b; protected $c; } Do którego pola klasy Dane możliwy będzie dostęp z zewnątrz poprzez nazwę obiektu utworzonego...

class Dane {
    public $a;
    private $b;
    protected $c;
}
Do którego pola klasy Dane możliwy będzie dostęp z zewnątrz poprzez nazwę obiektu utworzonego jako instancja tej klasy?
A. Do pola $b.
B. Do pola $c.
C. Do wszystkich pól.
D. Do pola $a.

Pytanie z egzaminu CKE, styczeń 2021 (arkusz EE.09-SG-21.01).

Poprawna jest odpowiedź: do pola a, bo zostało ono zadeklarowane z modyfikatorem public. W PHP oznacza to, że właściwość obiektu może być odczytywana i zmieniana spoza klasy, np. przez utworzoną instancję i operator strzałki ->, czyli w praktyce coś w stylu obiekt->a. To jest podstawowa zasada widoczności w programowaniu obiektowym: public jest dostępne z każdego miejsca, private tylko wewnątrz tej samej klasy, a protected wewnątrz klasy oraz w klasach dziedziczących. Z mojego doświadczenia warto jednak uważać z publicznymi polami. W dobrych praktykach branżowych często stosuje się enkapsulację, czyli ukrywanie danych w polach private i udostępnianie ich przez metody typu get oraz set. Publiczne właściwości bywają sensowne w prostych strukturach danych, DTO albo przykładach edukacyjnych, ale w większych aplikacjach łatwo przez nie rozjechać kontrolę poprawności danych.
W tym przykładzie kluczowe jest zrozumienie modyfikatorów dostępu w PHP, a nie samo to, że pola znajdują się w tej samej klasie. Jeżeli obiekt klasy Dane zostanie utworzony na zewnątrz, to bezpośredni dostęp przez nazwę obiektu będzie możliwy wyłącznie do właściwości publicznej, czyli do pola a. Częsty błąd polega na myśleniu, że skoro obiekt istnieje w pamięci i ma wszystkie trzy właściwości, to można się do nich normalnie odwołać. Technicznie obiekt rzeczywiście je posiada, ale język PHP pilnuje reguł widoczności i zablokuje dostęp do pól prywatnych oraz chronionych spoza dozwolonego zakresu. Pole b jest private, więc może być używane tylko w metodach tej samej klasy. Nawet klasa potomna nie ma do niego bezpośredniego dostępu. Pole c jest protected, więc jest trochę mniej restrykcyjne niż private, ale nadal nie jest dostępne z zewnątrz przez zwykłą instancję obiektu. Może z niego korzystać sama klasa i klasy dziedziczące. W praktyce takie ograniczenia nie są utrudnieniem dla programisty, tylko mechanizmem ochrony danych. Moim zdaniem to jedna z ważniejszych zasad OOP: stan obiektu nie powinien być przypadkowo zmieniany z dowolnego miejsca programu, bo potem bardzo trudno znaleźć źródło błędu.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.