PHP 8.2.4 Released!

Sintaxe

Constantes podem ser definidas utilizando a declaração const ou através da função define(). Enquanto define() permite que uma constante seja definida usando uma expressão arbitrária, a palavra-chave const possui restrições descritas abaixo. Uma vez definida, a constante não poderá ser modificada ou anulada.

Quando usando a declaração const, somente valores escalares (bool, int, float e string) e array constantes contendo apenas valores escalares são aceitos. É possível definir constantes como um resource, mas isso deve ser evitado, pois pode ocasionar resultados inesperados.

O valor da costante é acessado simplesmente informando seu nome. Diferentemente de variáveis, você não prefixará uma constante com um sinal de $. Também pode-se utilizar a função constant() para ler o valor de uma constante se o nome da constante for obtida dinamicamente. Utilize get_defined_constants() para obter a lista de todas as constantes definidas.

Nota: As constantes e variáveis (globais) estão em espaços de nomes diferentes. Isto implica, por exemplo, que true e $TRUE sejam geralmente diferentes.

Se uma constante não definida é usada, um erro Error é lançado. Anteriormente ao PHP 8.0.0, constantes não definidas eram interpretadas como uma string comum, no caso, uma variável string contendo o nome da própria constante. Esse mecanismo alternativo ficou obsoleto no PHP 7.2.0, e um alerta nível E_WARNING é lançado quando isso acontecer. Anteriormente ao PHP 7.2.0, um alerta E_NOTICE era lançado. Veja também porque $foo[bar] é errado a não ser que bar seja uma constante. Isto não se aplica às constantes qualificadas, quais sempre lançam um Error se não definidas.

Nota: Para conferir se uma constante está definida, utilize a função defined().

Estas são as diferenças entre constantes e variáveis:

  • Constantes não possuem um sinal de cifrão ($) antes delas;
  • Constantes podem ser definidas e acessadas de qualquer lugar sem que a regras de escopo de variáveis sejam aplicadas;
  • Constantes não podem ser redefinidas ou eliminadas depois de criadas; e
  • Constantes só podem ter valores escalares ou arrays.

Exemplo #1 Definindo Constantes

<?php
define
("CONSTANT", "Hello world.");
echo
CONSTANT; // imprime "Hello world."
echo Constant; // Lança um erro Error: Undefined constant "Constant"
// Anteriormente ao PHP 8.0.0, imprimia "Constant" e emitia um warning.
?>

Exemplo #2 Definindo Constantes usando a palavra-chave const

<?php
// Simple scalar value
const CONSTANT = 'Hello World';

echo
CONSTANT;

// Scalar expression
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo
ANOTHER_CONST;

const
ANIMALS = array('dog', 'cat', 'bird');
echo
ANIMALS[1]; // imprime "cat"

// Array constante
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo
ANIMALS[1]; // imprime "cat"
?>

Nota:

Ao contrário das constantes definidas através de define(), as constantes definidas usando a declaração const devem ser declaradas no maior escopo que elas serão utiluzadas, em tempo de compilação. Isto significa que constantes não podem ser declaradas dentro de funções, loops, if ou blocos try/catch.

Veja Também

add a note

User Contributed Notes 6 notes

up
18
souzanicolas87 at gmail dot com
1 year ago
the documentation doesn't go too far in explaining the crucial difference between the two ways of declaring constants in PHP.

Const is handled at compile time, define() at run time. For this reason, a constant cannot be conditionally defined using Const, for example.

Another difference we can notice occurs in the constant declarations in classes. Const infiltrates the class scope, while define() leaks into the global scope.

<?php

Class Myclass (){
    const
NAME = "Nicolas";
}

?>

The NAME constant is within the scope of the MyClass class.
up
8
login at (two)view dot de
5 years ago
Just a quick note:
From PHP7 on you can even define a multidimensional Array as Constant:

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

does work as expected.
up
-6
privat at ulrich-kapp dot de
3 years ago
const ArrayFromTextfile = file("mytextfile.txt", FILE_IGNORE_NEW_LINES);

does not work, it throws an error:
Fatal error: Constant expression contains invalid operations in php shell code on line …

Instead use:

define ("ArrayFromTextfile", file("mytextfile.txt", FILE_IGNORE_NEW_LINES));

print_r(ArrayFromTextfile);

Result:
Array
(
    [0] ⇨ Line 1
    [1] ⇨ Line 2
    [2] ⇨ Line 3
    [3] => …
)
up
-5
LilyWhite
1 year ago
> Constants and (global) variables are in a different namespace. This implies that for example true and $TRUE are generally different.

This means that you may assign a value to a variable with the same name of a constant, which might lead to unwanted results.

<?php
const FOO = "hello";
$FOO = "goodbye";
echo
$FOO;
?>

will output ``goodbye''.
up
-9
mh at hanft dot de
3 years ago
With PHP 5.6, multi-dimensional arrays are also possible if you use "const" instead of "define". So,

define('QUARTLIST',array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul')));

won't work with PHP 5.6, but

const QUARTLIST=array('1. Quarter'=>array('jan','feb','mar'),'2.Quarter'=>array('may','jun','jul'));

will.
up
-23
halfhearted13 at gmail dot com
2 years ago
Constants of constant :

<?php

const foo = hello;
const
bar = foo;
const
bd = bar;

echo
"bd = " .bd;   // Prints out: Hello

?>
To Top