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
Синтаксис
Можете да дефинирате константа посредством функциятаdefine() или чрез ключовата дума const извън дефиницията на клас, от PHP 5.3.0. Веднъж дефинирана, константата никога повече не може да бъде променяна или отменяна.
В константи могат да се съхраняват единствено скаларни данни (boolean, integer, float и string). По принцип е възможно да дефинирате и данни от тип resource, но това трябва да бъде избягвано, тъй като може да доведе до неочаквани резултати.
Можете да вземете стойността на константа като просто укажете името й. За разлика от променливите, пред константа не трябва да слагате $. Можете също да използвате функцията constant(), за да получите стойността на константа, в случай, че желаете да получите името на константата динамично. За списък с всички дефинирани константи, използвайте get_defined_constants().
Забележка: Константите и (глобалните) променливи са в различни пространства от имена (namespaces). Това означава, че TRUE и $TRUE обикновено са различни.
Ако използвате недефинирана константа, PHP приема, че имате предвид името на самата константа, също както ако сте я извикали като string (CONSTANT и "CONSTANT"). Когато това се случи, ще бъде изведена грешка от ниво E_NOTICE. Вижте също раздела, в който се повдига въпросът защо $foo[bar] е погрешно (освен ако преди това не сте дефинирали с define() bar като константа). Ако просто искате да проверите дали дадена константа е дефинирана, използвайте функцията defined().
Това са разликите между константи и променливи:
- Константите нямат знак за долар ($) пред тях;
- Константите могат да бъдат дефинирани единствено посредством функцията define(), а не чрез обикновено установяване;
- Константите могат да бъдат достъпвани където и да е без оглед на правилата за обхват на променливите;
- Веднъж дефинирани, константите не могат да бъдат премахвани или дефинирани повторно;
- Константите могат да имат само скаларни стойности.
Example #1 Дефиниране на константи
<?php
define("CONSTANT", "Здравей свят.");
echo CONSTANT; // извежда "Здравей свят."
echo Constant; // извежда "Constant" и пуска съобщение (notice).
?>
Example #2 Дефиниране на константи посредством ключовата дума const
<?php
// Работи от PHP 5.3.0
const CONSTANT = 'Здравей свят';
echo CONSTANT;
?>
Вж. също Класови константи.
Constant names shouldn't include operators. Otherwise php doesn't take them as part of the constant name and tries to evaluate them:
<?php
define("SALARY-WORK",0.02); // set the proportion
$salary=SALARY-WORK*$work; // tries to subtract WORK times $work from SALARY
?>
Don't let the comparison between const (in the global context) and define() confuse you: while define() allows expressions as the value, const does not. In that sense it behaves exactly as const (in class context) does.
<?php
// this works
/**
* Path to the root of the application
*/
define("PATH_ROOT", dirname(__FILE__));
// this does not
/**
* Path to configuration files
*/
const PATH_CONFIG = PATH_ROOT . "/config";
// this does
/**
* Path to configuration files - DEPRECATED, use PATH_CONFIG
*/
const PATH_CONF = PATH_CONFIG;
?>
