KWALIFIKACJA INF3 - STYCZEŃ 2021

PYTANIE NR 3.
Do którego pola klasy Dane możliwy będzie dostęp z zewnątrz poprzez nazwę obiektu utworzonego jako instancja tej klasy?
Ilustracja przedstawia fragment kodu w języku programowania, który jest częścią pytania egzaminacyjnego związanego z
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Dostęp z zewnątrz przez nazwę obiektu jest możliwy tylko do właściwości oznaczonych jako public.
W przedstawionej klasie pole $a ma widoczność publiczną, więc można się do niego odwołać z kodu spoza klasy. Pola $b i $c mają ograniczoną widoczność, dlatego nie są dostępne w ten sposób.

Pełne wyjaśnienie:

W PHP dostęp do pól (właściwości) obiektu "z zewnątrz", czyli z kodu, który nie znajduje się wewnątrz definicji danej klasy, zależy od modyfikatora dostępu ustawionego przy właściwości.

  • public – właściwość jest dostępna wszędzie: zarówno wewnątrz klasy, jak i z kodu zewnętrznego przez nazwę obiektu (np. $obj->pole).
  • protected – dostęp jest możliwy tylko wewnątrz klasy oraz w klasach dziedziczących; kod zewnętrzny nie może użyć nazwy obiektu, aby odczytać/zapisać to pole.
  • private – dostęp jest możliwy wyłącznie wewnątrz tej samej klasy; nawet klasy potomne nie mają bezpośredniego dostępu.

W zadaniu należy odczytać z definicji klasy, które pole ma widoczność publiczną. Ponieważ pole $a jest publiczne, to właśnie do niego będzie możliwy dostęp przez nazwę obiektu będącego instancją tej klasy.

Odpowiedź "Do wszystkich pól." jest błędna, bo PHP nie udostępnia automatycznie wszystkich właściwości na zewnątrz – działa tu enkapsulacja i kontrola widoczności. Odpowiedzi "Do pola $b." oraz "Do pola $c." są błędne, gdy te pola nie mają widoczności public (np. są protected/private), więc próba dostępu z zewnątrz skończy się błędem dostępu.

Wskazówka egzaminacyjna: przy takich pytaniach zawsze najpierw wyszukaj w kodzie słowa kluczowe public/protected/private, a dopiero potem wybieraj odpowiedź. Sama nazwa zmiennej ($a, $b, $c) nie niesie informacji o dostępności.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Pole publiczne (public) jest dostępne z każdego miejsca w kodzie: z wnętrza klasy i z zewnątrz przez obiekt. Oznacza to, że można je odczytać lub zapisać np. przez $obiekt->pole, o ile obiekt jest instancją tej klasy.
Sprawdź modyfikator dostępu przy deklaracji właściwości. Tylko public pozwala na dostęp z zewnątrz przez nazwę obiektu. Jeśli widzisz protected lub private, to dostęp bezpośredni spoza klasy nie będzie możliwy.
private realizuje enkapsulację: pole ma być używane tylko wewnątrz tej samej klasy, aby chronić stan obiektu. Dostęp z zewnątrz jest blokowany, a poprawnym sposobem bywa użycie metod (np. getter/setter), które kontrolują odczyt i zapis.
protected pozwala używać pola wewnątrz klasy oraz w klasach dziedziczących, ale nie w kodzie zewnętrznym. To kompromis między public a private: umożliwia rozszerzanie klasy (dziedziczenie), a jednocześnie ukrywa szczegóły implementacji przed resztą aplikacji.
public: dostęp wszędzie.
protected: dostęp w klasie i w klasach potomnych.
private: dostęp tylko w tej samej klasie.
Na egzaminie najczęściej sprawdza się, czy umiesz wskazać, które elementy są dostępne "z zewnątrz" przez obiekt.
W standardowym, poprawnym podejściu nie: kod zewnętrzny nie powinien omijać enkapsulacji. Technicznie istnieją mechanizmy refleksji, ale nie są one typowym rozwiązaniem w zadaniach egzaminacyjnych. Zwykle oczekuje się użycia metod publicznych udostępnionych przez klasę.
Pola publiczne stosuje się rzadziej, zwykle gdy obiekt jest prostą strukturą danych. W praktyce częściej daje się pola private/protected i udostępnia metody (gettery/settery), aby walidować dane, utrzymać spójność i móc zmieniać implementację bez psucia reszty kodu.
Najczęściej używa się operatora ->, np. $obiekt->a. To zadziała tylko wtedy, gdy właściwość jest dostępna w danym kontekście (np. ma widoczność public). Jeśli pole jest ukryte, zamiast tego wywołuje się publiczną metodę, np. $obiekt->getA().
Najczęstsze błędy to: ignorowanie słów public/protected/private, zakładanie że "wszystko jest dostępne przez obiekt", oraz mylenie dostępu z wnętrza klasy z dostępem z kodu zewnętrznego. Pomaga szybka analiza deklaracji pól w kodzie i przypomnienie zasad widoczności.
Przećwicz krótkie przykłady: zdefiniuj klasę z polami public/protected/private i sprawdź, co działa z zewnątrz. Naucz się też, że ukryte pola obsługuje się metodami. Na egzaminie czytaj kod linia po linii i szukaj modyfikatorów dostępu przy właściwościach.
info

Statystycznie 41% uczniów zna prawidłową odpowiedź. trudne

Specjaliści zwracają uwagę: "Pola $b i $c mają ograniczoną widoczność, dlatego nie są dostępne w ten sposób."

Źródła:

  • PHP Manual: Visibility (OOP) – https://www.php.net/manual/en/language.oop5.visibility.php (dostęp: 2026-02-27)
  • PHP Manual: Properties – https://www.php.net/manual/en/language.oop5.properties.php (dostęp: 2026-02-27)
  • PHP Manual: Classes and Objects – https://www.php.net/manual/en/language.oop5.php (dostęp: 2026-02-27)

Materiały:

  • Dokumentacja PHP: rozdział o widoczności (visibility) i właściwościach klas
  • Krótkie ćwiczenia: przepisywanie klas z public na private i dodawanie getterów/setterów
  • Notatka/ściąga: tabela public/protected/private – gdzie działa dostęp

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego