Ответ
Да, начиная с PHP 8.1, в интерфейсах можно объявлять константы. Они являются публичными, неизменяемыми и доступны через имя интерфейса или класс, реализующий этот интерфейс.
Пример объявления и использования:
interface Logger {
public const LOG_LEVEL_ERROR = 1;
public const LOG_LEVEL_WARNING = 2;
public function log(string $message, int $level): void;
}
class FileLogger implements Logger {
public function log(string $message, int $level): void {
if ($level === Logger::LOG_LEVEL_ERROR) {
// Обработка ошибки
}
}
}
// Доступ через интерфейс
echo Logger::LOG_LEVEL_ERROR; // 1
// Доступ через реализующий класс
echo FileLogger::LOG_LEVEL_WARNING; // 2
Ключевые особенности:
- Константы в интерфейсах всегда
public(модификатор можно не указывать). - Нельзя объявлять
protectedилиprivateконстанты. - Константы наследуются всеми классами, реализующими интерфейс.
- Хотя технически константу можно переопределить в классе с помощью
const, это считается плохой практикой, нарушающей контракт интерфейса.