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.Синтакса
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Синтакса
Референца за `language.constants.syntax.php` со подобрена типографија и навигација.
Синтакса
Константите можат да се дефинираат со користење на клучниот збор const , или со користење на функцијата define(). Додека define() дозволува константа да биде дефинирана на произволен израз, клучниот збор const има ограничувања како што е опишано во следниот параграф. Откако константа е дефинирана, таа никогаш не може да се промени или да се поништи.
Кога се користи клучниот збор const , прифатени се само скаларни (bool, int,
float and string) изрази и константи
array кои содржат само скаларни изрази. Можно е да се дефинираат константи како resource, но тоа треба да се избегне, бидејќи може да предизвика неочекувани резултати.
Вредноста на константа се пристапува едноставно со наведување на нејзиното име. За разлика од променливите, константа е not претходена со $. Исто така е можно да се користи функцијата constant() за читање на вредноста на константа ако името на константата се добие динамички. Користете get_defined_constants() за да добиете листа на сите дефинирани константи.
Забелешка: Константите и (глобалните) променливи се во различен именски простор. Ова подразбира дека, на пример
trueand $TRUE се генерално различни.
Ако се користи недефинирана константа, се фрла Грешка . Пред PHP 8.0.0, недефинираните константи би се толкувале како гол збор string, т.е. (CONSTANT наспроти "CONSTANT"). Ова враќање е застарено од PHP 7.2.0, и грешка од ниво
E_WARNING се издава кога ќе се случи. Пред PHP 7.2.0, грешка од ниво
E_NOTICE се издава наместо тоа. Погледнете го и записот во прирачникот зошто
$foo[bar] е погрешно (освен ако bar е константа). Ова не се однесува на (целосно) квалификувани константи, што секогаш ќе предизвика Грешка ако не е дефинирано.
Забелешка: За да проверите дали е поставена константа, користете го defined() function.
Ова се разликите помеѓу константите и променливите:
-
Константите немаат знак долар (
$) пред нив; - Константите може да се дефинираат и пристапат насекаде без оглед на правилата за опсег на променливите;
- Константите не може повторно да се дефинираат или да се поништат откако ќе се постават; и
- Константите може да се проценат само на скаларни вредности или низи.
Пример #1 Дефинирање константи
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
echo Constant; // Emits an Error: Undefined constant "Constant"
// Prior to PHP 8.0.0, outputs "Constant" and issues a warning.
?>
Пример #2 Дефинирање константи користејќи го const keyword
<?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]; // outputs "cat"
// Constant arrays
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // outputs "cat"
?>Забелешка:
За разлика од дефинирањето константи користејќи define(), константите дефинирани користејќи го
constклучниот збор мора да бидат декларирани на највисокото ниво на опсег бидејќи се дефинирани во време на компајлирање. Ова значи дека не можат да бидат декларирани во функции, циклуси,ifизјави илиtry/catchblocks.
Белешки од корисници 3 белешки
"const is defined at compile time" may not be true, depending on what you call "defining".
Although you can't define a const inside an if, like
if ($c === 'a') {
const c = a;
}
else {
const c = b;
}
# Results in a parse error
you can assign it a value depending on a conditionnal 'define' constant
$a = 1;
if ($a === 1) {
define('a', 'one');
}
else {
define('a', 'two');
}
const c = a;
# Valid, c equals "one"
https://onlinephp.io/c/b8227Just 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.