PHP 5.6.18 is available

Sintaxe

Você pode definir uma constante utilizando a função define(), ou a palavra-chave const fora da definição de uma classe a partir do PHP 5.3.0. Uma vez definida, a constante não poderá ser modificada ou anulada.

Até o PHP 5.6, somente dados escalares (boolean, integer, float e string) podem ser colocados em constantes. A partir do PHP 5.6, é possível também utilizar qualquer expressão escalar como constantes e também array constante. É permitido o uso de um resource (recurso) como valor de constante, mas deve ser evitado já que pode causar resultados não esperados.

Você pode obter o valor de uma constante simplesmente especificando seu nome. Diferentemente de variáveis, você não prefixa uma constante com um sinal de $. Você também pode utilizar a função constant() para ler o valor de uma constante, se você precisar obter seu valor 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 são geralmente diferentes.

Se você usar uma constante indefinida, o PHP assume o nome da constante como seu próprio valor, como se você tivesse uma string (CONSTANT vs "CONSTANT"). Um erro de nível E_NOTICE será lançado quando isso acontecer. Veja também a referência do manual sobre como $foo[bar] é errado (a não ser que você primeiro define() bar como uma constante). Isto não se aplica a constantes totalmente qualificas, quais lancarão um erro fatal se não estiverem definidas. Se você simplesmente quer checar se uma constante foi 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;
  • Antes do PHP 5.3 as constantes só podem ser definidas utilizando a função define(), e não por simples assimilação;
  • Constantes podem ser definidas e acessadas de qualquer lugar sem que a regras de escopo de variáveis seja aplicadas;
  • Constantes não podem ser redefinidas ou eliminadas depois que elas são criadas; e
  • Constantes só podem serem valores escalares. A partir do PHP 5.6 é possível definir uma constante array com a instrução const e a partir do PHP 7 arrays constantes também podem ser definidos utilizando-se define() Você pode utilizar arrays em expressões escalares constantes (por exemplo const FOO = array(1,2,3)[0];), cujo resultado final pode ser de qualquer tipo definido.

Exemplo #1 Definindo Constantes

<?php
define
("CONSTANT""Hello world.");
echo 
CONSTANT// imprime "Hello world."
echo Constant// imprime "Constant" e gera um alerta notice.
?>

Exemplo #2 Definindo Constantes usando a palavra-chave const

<?php
// Funciona a partir do PHP 5.3.0
const CONSTANT 'Hello World';

echo 
CONSTANT;

// Funciona a partir do PHP 5.6.0
const ANOTHER_CONST CONSTANT.'; Goodbye World';
echo 
ANOTHER_CONST;

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

// A partir do PHP 7
define('ANIMALS', array(
    
'dog',
    
'cat',
    
'bird'
));
echo 
ANIMALS[1]; // imprime "cat"
?>

Nota:

Ao contrário das funções definidas através de define(), as constantes definidas usando a palavra-chave const devem ser declarados no escopo de topo (principal), pois são definidas no tempo de compilação. Isso significa que elas não podem ser definidas dentro de funções, laços ou ifs ou blocos try/catch.

Veja também Constantes de Classe.

add a note add a note

User Contributed Notes 4 notes

up
11
Fred
1 year ago
The const keyword will not allow anything that may have to be "processed":

$color = "red";
const RED = "This is the color $color"; //Doesn't work
define(strtoupper($color), "This is the color $color") // Works fine
up
0
Dwza
28 days ago
Of course associative array declarations are available too.

<?php
//PHP 5.6.x <
const DBDATA = array("user"=>"foobar","password"=>"123456","dbname"=>"xyz");

echo
"DB-Username is: " . DBDATA['user']; // foobar
echo "DB-UserPwd is: " . DBDATA['user']; // 123456

//PHP 7.x <
define( "DBDATA", array("user"=>"foobar","password"=>"123456","dbname"=>"xyz"));

echo
"DB-Username is: " . DBDATA['user']; // foobar
echo "DB-UserPwd is: " . DBDATA['user']; // 123456
?>
up
-9
0gb dot us at 0gb dot us
4 years ago
While most constants are only defined in one namespace, the case-insensitive true, false, and null constants are defined in ALL namespaces. So, this is not valid:

<?php namespace false;
const
ENT_QUOTES = 'My value';
echo
ENT_QUOTES;//Outputs as expected: 'My value'

const FALSE = 'Odd, eh?';//FATAL ERROR! ?>

Fatal error: Cannot redeclare constant 'FALSE' in /Volumes/WebServer/0gb.us/test.php on line 5
up
-9
kuzawinski dot marcin at NOSPAM dot gmail dot com
1 year ago
Actually, there is a way, to (re)declare FALSE (also: False, false, TRUE, NULL, etc.) constant, even if it is already declared:

<?php

var_dump
(constant('I_DONT_EXIST')); // warning "Couldn't find constant I_DONT_EXIST"
var_dump(constant('FALSE'));  //no warning, output: bool(false)

define('FALSE', TRUE);

var_dump(constant('FALSE')); //output: bool(true)

// but...

var_dump(constant('false')); // output: bool(false)
var_dump(FALSE); // output: bool(false);

?>
To Top