Menu
Coddy logo textTech

Stałe w klasach

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

Czasami w klasie potrzebujesz wartości, które nigdy nie powinny się zmieniać. Stałe klasowe pozwalają definiować stałe wartości, które pozostają takie same we wszystkich instancjach i nie można ich modyfikować po zadeklarowaniu.

Definiujesz stałą za pomocą słowa kluczowego const wewnątrz klasy. Zgodnie z konwencją nazwy stałych zapisuje się wielkimi literami:

<?php
class Circle {
    const PI = 3.14159;
    
    public $radius;
    
    public function __construct($radius) {
        $this->radius = $radius;
    }
    
    public function area() {
        return self::PI * $this->radius * $this->radius;
    }
}

$circle = new Circle(5);
echo $circle->area();

Wynik:

78.53975

Podobnie jak właściwości statyczne, stałe należą do klasy, a nie do poszczególnych obiektów. Odwołujesz się do nich za pomocą self::CONSTANT_NAME wewnątrz klasy lub ClassName::CONSTANT_NAME z zewnątrz:

<?php
class HttpStatus {
    const OK = 200;
    const NOT_FOUND = 404;
    const SERVER_ERROR = 500;
}

echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;

Wynik:

200
404

Najważniejsza informacja: W przeciwieństwie do właściwości statycznych stałych nie można zmienić po ich zdefiniowaniu. Są idealne dla wartości, które powinny pozostać niezmienne w całej aplikacji, takich jak wartości konfiguracji, kody statusu czy stałe matematyczne.

challenge icon

Wyzwanie

Łatwy

Zbudujmy narzędzie do konwersji temperatury, które używa stałych klasy do przechowywania niezmiennych wartości konwersji.

Utworzysz dwa pliki, aby uporządkować kod:

  • Temperature.php: Zdefiniuj klasę Temperature, która obsługuje konwersję temperatury. Klasa powinna mieć trzy stałe: FREEZING_POINT_C o wartości 0, BOILING_POINT_C o wartości 100 i CONVERSION_FACTOR o wartości 1.8 (używaną do konwersji stopni Celsjusza na Fahrenheita). Dodaj właściwość public $celsius i konstruktor, który przyjmuje i ustawia wartość temperatury w stopniach Celsjusza. Dodaj metodę toFahrenheit(), która konwertuje zapisaną temperaturę w stopniach Celsjusza na stopnie Fahrenheita za pomocą wzoru: (celsius * CONVERSION_FACTOR) + 32. Dodaj też metodę getStatus(), która zwraca "Freezing", jeśli temperatura jest równa stałej punktu zamarzania, "Boiling", jeśli jest równa stałej punktu wrzenia, lub "Normal" w pozostałych przypadkach.
  • main.php: Dołącz plik klasy Temperature. Utwórz trzy obiekty Temperature o wartościach 0, 100 i 25. Dla każdej temperatury wypisz wynik konwersji na stopnie Fahrenheita, a następnie jej status w tym samym wierszu, w formacie: "[fahrenheit]F - [status]". Każda temperatura powinna znaleźć się w osobnym wierszu. Po wypisaniu wszystkich trzech temperatur odwołaj się bezpośrednio do stałej BOILING_POINT_C z klasy (używając Temperature::BOILING_POINT_C) i wypisz ją w nowym wierszu.

Pamiętaj, że wewnątrz klasy do stałych odwołujesz się za pomocą self::CONSTANT_NAME, a z zewnątrz — za pomocą ClassName::CONSTANT_NAME. W przeciwieństwie do właściwości, przy odwoływaniu się do stałych nie używa się symbolu $.

Spróbuj swoich sił

<?php

require_once 'Temperature.php';

// TODO: Utwórz trzy obiekty Temperature o wartościach 0, 100 i 25

// TODO: Dla każdej temperatury wypisz wynik w formacie: "[fahrenheit]F - [status]"
// Każdą temperaturę wypisz w osobnym wierszu

// TODO: Uzyskaj dostęp do stałej BOILING_POINT_C bezpośrednio z klasy i wypisz jej wartość
// Użyj składni ClassName::CONSTANT_NAME

?>
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