Константы в классах
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 16 из 91.
Иногда вам нужны значения в class, которые никогда не должны изменяться. constants class позволяют Define фиксированные значения, которые остаются одинаковыми во всех экземплярах и не могут быть изменены после объявления.
Вы определяете константу с помощью ключевого слова const внутри класса. По соглашению имена констант записываются в верхнем регистре:
<?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();
Результат:
78.53975Как и статические свойства, constants принадлежат классу, а не отдельным objects. Вы access их с помощью self::CONSTANT_NAME внутри класса или ClassName::CONSTANT_NAME извне:
<?php
class HttpStatus {
const OK = 200;
const NOT_FOUND = 404;
const SERVER_ERROR = 500;
}
echo HttpStatus::OK . "\n";
echo HttpStatus::NOT_FOUND;
Вывод:
200
404Ключевой момент: В отличие от статических свойств, constants нельзя изменить после их определения. Они идеально подходят для значений, которые должны оставаться неизменными во всём приложении, например для значений конфигурации, кодов состояния или математических констант.
Задание
ЛегкоДавайте создадим утилиту для преобразования температуры, которая использует class constants для хранения фиксированных значений преобразования, которые никогда не меняются.
Вы создадите два файла, чтобы организовать свой код:
Temperature.php: Define classTemperature, которая обрабатывает преобразования температуры. У class должны быть три constants:FREEZING_POINT_Cсо значением0,BOILING_POINT_Cсо значением100иCONVERSION_FACTORсо значением1.8(используется для преобразования Celsius в Fahrenheit). Добавьте свойствоpublic $celsiusи constructor, который accepts и устанавливает значение Celsius. Добавьте methodtoFahrenheit(), преобразующий сохранённую температуру Celsius в Fahrenheit по Formula:(celsius * CONVERSION_FACTOR) + 32. Также добавьте methodgetStatus(), который возвращает"Freezing", если температура equals constant точки замерзания,"Boiling", если она equals constant точки кипения, или"Normal"otherwise.main.php: Подключите файл class Temperature. Создайте три объекта Temperature со значениями0,100и25. Для каждой температуры print преобразование в Fahrenheit, за которым следует статус в той же строке, в формате:"[fahrenheit]F - [status]". Каждая температура должна находиться на собственной строке. После вывода всех трёх directly access constantBOILING_POINT_Cиз class (usingTemperature::BOILING_POINT_C) и выведите её на новой строке.
Помните, что constants access using self::CONSTANT_NAME inside class и ClassName::CONSTANT_NAME outside. В отличие от свойств, constants не используют символ $ при обращении к ним.
Попробуйте сами
<?php
require_once 'Temperature.php';
// TODO: Создайте три объекта Temperature со значениями 0, 100 и 25
// TODO: Для каждой температуры выведите в формате: "[fahrenheit]F - [status]"
// Каждая температура на своей строке
// TODO: Обратитесь к константе BOILING_POINT_C и выведите её напрямую из класса
// Используйте синтаксис ClassName::CONSTANT_NAME
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP