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 fornecem uma maneira de definir valores fixos que permanecem os mesmos 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 aos objetos individuais. Você as acessa usando self::CONSTANT_NAME dentro da classe ou ClassName::CONSTANT_NAME 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 Chave: 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 construir um utilitário de conversão de temperatura que utiliza constantes de classe para armazenar valores de conversão fixos que nunca mudam.

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

  • Temperature.php — Defina uma classe Temperature que lida 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 converte a temperatura Celsius armazenada para Fahrenheit usando a fórmula: (celsius * CONVERSION_FACTOR) + 32. Adicione também um método getStatus() que retorna "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 pelo status na mesma linha neste formato: "[fahrenheit]F - [status]". Cada temperatura deve estar em sua própria linha. Após 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. Diferente das propriedades, as constantes não usam o símbolo $ ao serem acessadas.

Folha de consulta

Constantes de classe são valores fixos que nunca mudam e são compartilhados entre todas as instâncias de uma classe. Defina-as usando a palavra-chave const:

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

Acesse constantes usando self::CONSTANT_NAME dentro da classe:

return self::PI * $radius * $radius;

Acesse constantes usando ClassName::CONSTANT_NAME fora da classe:

echo Circle::PI;

Principais diferenças em relação às propriedades estáticas:

  • Constantes não podem ser alteradas após a declaração
  • Constantes não usam o símbolo $
  • Constantes são ideais para valores fixos, como configurações, códigos de status ou constantes matemáticas

Por convenção, os nomes das constantes são escritos em letras maiúsculas:

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

echo HttpStatus::OK;  // 200

Experimente você mesmo

<?php

require_once 'Temperature.php';

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

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

// TODO: Acessar e imprimir 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