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.53975Podobnie 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
404Najważ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.
Wyzwanie
ŁatwyZbudujmy 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_Co wartości0,BOILING_POINT_Co wartości100iCONVERSION_FACTORo wartości1.8(używaną do konwersji stopni Celsjusza na Fahrenheita). Dodaj właściwośćpublic $celsiusi 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ściach0,100i25. 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łejBOILING_POINT_Cz klasy (używającTemperature::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
?>Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online