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 PHP

class Konto { public $numer; private $saldo; public function wplac($kwota) { if ($this->sprawdz($kwota)) $this->saldo += $kwota; } private function...

class Konto {
    public $numer;
    private $saldo;
    public function wplac($kwota) {
        if ($this->sprawdz($kwota)) $this->saldo += $kwota;
    }
    private function sprawdz($kwota) {
        return $kwota > 0;
    }
}
Które stwierdzenie najlepiej opisuje klasę Konto zdefiniowaną w języku PHP i przedstawioną na listingu?
A. Ma dwa pola i dwie metody, metodę sprawdz można wywołać tylko wewnątrz klasy.
Dobrze. Pola numer i saldo, metody wplac() i sprawdz(); private ogranicza dostęp do sprawdz().
B. Ma dwa pola i dwie metody, pole numer jest dostępne tylko dla metod klasy.
Źle. Pole numer ma modyfikator public, więc jest dostępne także spoza klasy.
C. Ma trzy pola i jedną metodę publiczną.
Źle. Zmienna kwota to parametr metod, a nie pole, i klasa ma dwie metody, w tym jedną prywatną.
D. Ma dwa pola, konstruktor i jedną metodę, wszystkie składowe są publiczne.
Źle. Klasa nie ma konstruktora __construct(), a saldo i sprawdz() są prywatne.

Poprawne jest stwierdzenie, że klasa ma dwa pola i dwie metody, a metodę sprawdz() można wywołać tylko wewnątrz klasy. Pola to $numer i $saldo, metody - wplac() i sprawdz(). Modyfikator private przy metodzie oznacza, że wolno jej użyć tylko w kodzie tej klasy, np. przez $this->sprawdz($kwota) w metodzie wplac(). Wywołanie $konto->sprawdz(100) spoza klasy zakończy się błędem.

Do zapamiętania: metody pomocnicze, które są tylko częścią wewnętrznej logiki, oznacza się jako private, a na zewnątrz udostępnia się metody publiczne. Dzięki temu saldo zmienia się wyłącznie przez wplac(), które najpierw sprawdza kwotę - to praktyczny przykład hermetyzacji.

Analizując listing, łatwo pomylić się przy liczeniu albo przy modyfikatorach. Zmienna $kwota nie jest polem klasy, tylko parametrem metod, dlatego pól są dwa, a nie trzy. Metody są również dwie, więc opis „jedna metoda publiczna” pomija prywatną metodę sprawdz().

Pole $numer ma modyfikator public, a więc jest dostępne także spoza klasy - ograniczony dostęp ma pole $saldo. Odpowiedź z konstruktorem jest błędna podwójnie: w PHP konstruktor nazywa się __construct(), a w tej klasie takiej metody nie ma; poza tym nie wszystkie składowe są publiczne, bo $saldo i sprawdz() mają modyfikator private.

Bezpieczna metoda analizy: policz deklaracje zmiennych w ciele klasy (pola), policz słowa function (metody), a potem przy każdym elemencie odczytaj modyfikator dostępu. Parametry metod, takie jak $kwota, nie są polami, bo istnieją tylko podczas wywołania metody.

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.