Menu
Coddy logo textTech

Promocja parametrów konstruktora (8.0)

Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 42 z 91.

PHP 8.0 wprowadził promocję konstruktora, funkcję, która znacznie ogranicza ilość powtarzalnego kodu podczas definiowania klas. Zamiast osobno deklarować właściwości, a następnie przypisywać im wartości w konstruktorze, możesz zrobić to za jednym razem.

Oto tradycyjne podejście, którego używasz:

<?php
class Product {
    private string $name;
    private float $price;
    
    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
    
    public function getInfo(): string {
        return $this->name . ": $" . $this->price;
    }
}

Dzięki promowaniu konstruktora dodajesz modyfikator dostępu bezpośrednio do parametrów konstruktora:

<?php
class Product {
    public function __construct(
        private string $name,
        private float $price
    ) {}
    
    public function getInfo(): string {
        return $this->name . ": $" . $this->price;
    }
}

$product = new Product("Laptop", 999.99);
echo $product->getInfo();

Wynik:

Laptop: $999.99

Dodając private, protected lub public przed parametrem konstruktora, PHP automatycznie tworzy właściwość i przypisuje jej wartość. Możesz łączyć parametry promowane ze zwykłymi parametrami w tym samym konstruktorze i w razie potrzeby nadal dodawać logikę w ciele konstruktora.

Najważniejsze: Promocja konstruktora eliminuje powtarzające się deklaracje i przypisania właściwości, dzięki czemu klasy są bardziej przejrzyste i łatwiejsze do odczytania, a jednocześnie zachowujesz pełną kontrolę nad hermetyzacją.

challenge icon

Wyzwanie

Łatwy

Stwórzmy system zarządzania kontaktami, który pokazuje elegancję promocji konstruktora. Utworzysz przejrzystą, nowoczesną klasę PHP, która eliminuje powtarzalny kod, zachowując właściwą enkapsulację.

Rozmieścisz kod w dwóch plikach:

  • Contact.php: Utwórz klasę Contact, używając promocji konstruktora do zdefiniowania wszystkich właściwości bezpośrednio w sygnaturze konstruktora. Twój kontakt powinien mieć:
    • Prywatną właściwość $name (string)
    • Prywatną właściwość $email (string)
    • Prywatną właściwość $phone (string) z wartością domyślną "Not provided"
    Użyj składni promocji konstruktora: nie trzeba osobno deklarować właściwości! Dodaj publiczną metodę getFullDetails(), która zwraca "[name] | [email] | [phone]". Dodaj też metodę getSummary(), która zwraca "Contact: [name]".
  • main.php: Dołącz plik Contact. Otrzymasz trzy dane wejściowe: imię, adres e-mail i numer telefonu. Utwórz dwie instancje Contact:
    • Pierwszy kontakt powinien używać wszystkich trzech wartości (imienia, adresu e-mail i numeru telefonu)
    • Drugi kontakt powinien używać tylko imienia i adresu e-mail (korzystając z domyślnej wartości telefonu)
    Wyświetl cztery wiersze:
    • Pełne informacje o pierwszym kontakcie
    • Podsumowanie pierwszego kontaktu
    • Pełne informacje o drugim kontakcie
    • Podsumowanie drugiego kontaktu

Zauważ, że promocja konstruktora pozwala definiować właściwości, ustawiać ich widoczność, deklarować ich typy i przypisywać im wartości — wszystko w jednej, czytelnej sygnaturze konstruktora. Opcjonalny parametr telefonu z wartością domyślną pokazuje, że promowane parametry bezproblemowo współpracują z wartościami domyślnymi, tak jak zwykłe parametry.

Spróbuj swoich sił

<?php

require_once 'Contact.php';

// Odczytaj dane wejściowe
$name = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));

// TODO: Utwórz pierwszy kontakt ze wszystkimi trzema wartościami (name, email, phone)

// TODO: Utwórz drugi kontakt, podając tylko name i email (użyj domyślnej wartości phone)

// TODO: Wyświetl pełne dane pierwszego kontaktu

// TODO: Wyświetl podsumowanie pierwszego kontaktu

// TODO: Wyświetl pełne dane drugiego kontaktu

// TODO: Wyświetl podsumowanie drugiego kontaktu

?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator PHP online