Menu
Coddy logo textTech

Constantes em Classes

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 16 de 91.

Às vezes, você precisa de valores em uma classe que nunca devem mudar. As constantes de classe oferecem uma maneira de definir valores fixos que permanecem iguais em todas as instâncias e não podem ser modificados após a declaração.

Você define uma constante usando a palavra-chave const dentro de uma classe. Por convenção, os nomes das constantes são escritos em letras maiúsculas:

<?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();

Saída:

78.53975

Assim como as propriedades estáticas, as constantes pertencem à classe, e não a objetos individuais. Você as acessa usando self::CONSTANT_NAME dentro da classe ou ClassName::CONSTANT_NAME de fora dela:

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

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

Saída:

200
404

Ponto principal: Ao contrário das propriedades estáticas, as constantes não podem ser alteradas depois de definidas. Elas são ideais para valores que devem permanecer fixos em toda a sua aplicação, como valores de configuração, códigos de status ou constantes matemáticas.

challenge icon

Desafio

Fácil

Vamos criar um utilitário de conversão de temperatura que usa constantes de classe para armazenar valores fixos de conversão que nunca mudam.

Você criará dois arquivos para organizar seu código:

  • Temperature.php: defina uma classe Temperature que lide com conversões de temperatura. A classe deve ter três constantes: FREEZING_POINT_C definida como 0, BOILING_POINT_C definida como 100 e CONVERSION_FACTOR definida como 1.8 (usada para a conversão de Celsius para Fahrenheit). Inclua uma propriedade public $celsius e um construtor que aceite e defina o valor em Celsius. Adicione um método toFahrenheit() que converta a temperatura Celsius armazenada para Fahrenheit usando a fórmula: (celsius * CONVERSION_FACTOR) + 32. Adicione também um método getStatus() que retorne "Freezing" se a temperatura for igual à constante do ponto de congelamento, "Boiling" se for igual à constante do ponto de ebulição ou "Normal" caso contrário.
  • main.php: inclua o arquivo da classe Temperature. Crie três objetos Temperature com os valores 0, 100 e 25. Para cada temperatura, imprima a conversão para Fahrenheit seguida do status na mesma linha, neste formato: "[fahrenheit]F - [status]". Cada temperatura deve estar em sua própria linha. Depois de imprimir as três, acesse a constante BOILING_POINT_C diretamente da classe (usando Temperature::BOILING_POINT_C) e imprima-a em uma nova linha.

Lembre-se de que as constantes são acessadas usando self::CONSTANT_NAME dentro da classe e ClassName::CONSTANT_NAME fora dela. Diferentemente das propriedades, as constantes não usam o símbolo $ ao serem acessadas.

Experimente você mesmo

<?php

require_once 'Temperature.php';

// TODO: Crie três objetos Temperature com os valores 0, 100 e 25

// TODO: Para cada temperatura, imprima no formato: "[fahrenheit]F - [status]"
// Cada temperatura em sua própria linha

// TODO: Acesse e imprima a constante BOILING_POINT_C diretamente da classe
// Use a sintaxe ClassName::CONSTANT_NAME

?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de PHP online