Створення констант у PHP - const і define(). Чарівні константи Php

Головна / Корисне ПЗ

Константи- Це значення, які не змінюються з часом. Ще зі школи Ви, напевно, знаєте багато константів, наприклад, число п, число e, прискорення вільного падіння та інші. І, зрозуміло, при програмуванні теж часто виникає необхідність введення констант. І про те, як створювати та використовувати константи в PHP, ми й поговоримо у цій статті.

Давайте з Вами створимо константучисла п:

define(PI, 3.1415926);
echo PI;
?>

Оператор defineстворює константу PIі надає їй значення 3.1415926 . Далі ми виводимо цю константу через оператор echo. Все дуже просто, однак, є одна рекомендація, яку я раджу Вам завжди дотримуватись. Обов'язково пишіть константивеликими літерами. Не те щоб це було обов'язково, але вкрай бажано. І так прийнято не тільки в PHP, але й інших мовах теж.

Зрозуміло, згодом змінити константу PI буде не можна (на те вона і константа).

Тепер розберемо одну функцію, яка перевіряє: " Чи визначено задану константу". Давайте напишемо такий скрипт:

if (!defined("PI")) define(PI, 3.1415926);
echo PI;
?>

Тут перевіряється існування константи PI. І якщо вона не існує (тобто функція define()повернула false), то тоді ініціалізуємо цю константу. Потім просто виводимо її.

Як бачите, створювати та використовувати свої константи у PHP- це дуже просто.

І, насамкінець, хочеться розповісти про вже вбудованих константах PHP. Давайте з Вами напишемо простий скрипт:

phpinfo();
?>

Ближче до кінця є розділ " PHP Variable". Власне, це не зовсім константи, однак, вони є константамипід час виконання даного скрипта. Зрозуміло, під час виконання іншого скрипту вони вже матимуть інші значення (не все, зрозуміло). Давайте з Вами виведемо пару констант, щоб Ви зрозуміли, як з ними працювати, адже вони використовуються дуже часто:

echo $_SERVER["REMOTE_ADDR"];
echo "
";
echo $_SERVER["QUERY_STRING"];
?>

У даному скриптіми виводимо IP-адреса користувача, що запустив скрипт, а на наступному рядку виводимо рядок запиту (наприклад, " index.php?id=7Забігаючи трохи вперед, кажу, що тут ми працюємо з глобальним масивом $_SERVER. З масивами ми ще познайомимося, але думаю, що ті, хто працював з масивами в інших мовах програмування, без проблем дізнаються синтаксис. Що ж до інших констант, то з ними робота відбувається аналогічно.

У цій замітці розберемося, у чому різниця в оголошенні PHP констант за допомогою ключового слова const та функції define().

Константи в PHP - це «постійні», значення яких вказується лише один раз і потім не може бути змінено. При спробі змінити значення, воно не зміниться і з'явиться PHP замітка: "Constant already defined" (константа вже визначена):

Define("FOO", "val"); define("FOO", "val2"); // Notice: Constant already defined echo FOO; //> val

Оголошувати константи в PHP можна двома способами:

// 1 define("NAME", "VALUE"); // 2 const NAME = "VALUE";

Кожен спосіб має свої особливості, щоб їх зрозуміти, давайте розглянемо все поетапно, як і що змінювалося з кожною версією PHP.

Як створювати константи

PHP менше 5.3

До 5.3 PHP, константи можна було визначати тільки через define() . Ключове слово const з'явилося із версії 5.3.

Константи можуть зберігати лише скаляри. Скалярні змінні - це змінні з типами integer, float, string і boolean. Типи array , об'єкт і ресурс не є скалярними.

// скаляри define("FOO", 10); define("FOO", 10.9); define("FOO", "val"); define("FOO", true); // не скаляри define("FOO", array(1)); // константа не встановитися і отримаємо Warning define("FOO", (object) array(1)); // константа не встановиться і отримаємо Warning

З версії PHP 5.3

З'явилося ключове слово const і тепер константу можна визначати ще за допомогою нього.

Однак, у const не можна вказати змінну, функцію або якийсь вираз, а потрібно передавати скаляр «безпосередньо»:

Const FOO = "val"; // немає помилок const FOO = $ var; // Parse error const FOO = home_url (); // Parse error const FOO = 5+10; // Parse error const FOO = "foo". "bar"; // Parse error

Тоді як для define() таких обмежень немає.

Define("FOO", "val"); // немає помилок define("FOO", $ var); // Немає помилок define("FOO", home_url()); // немає помилок define("FOO", 5 + 10); // немає помилок define("FOO", "foo". "bar"); // Немає помилок

PHP 5.6

Стало можливим вказувати значення const примітивні PHP вирази (вирази з скалярів):

Const FOO = 1+2; const FOO = "foo". "bar";

Стало можливим зберігати масиви у константах:

Const FOO =; // працює define("FOO", ); // не працює PHP 5.6, працює в PHP 7.0

Різниця між define() та const

#1 const повинні бути оголошені у верхній області

На відміну від define() , const повинні бути оголошені у верхній області видимості, тому що вони визначаються при компілюванні скрипта. Це означає, що їх не можна оголошувати всередині функцій/циклів/виразів if чи try/catch блоків.

If (1) ( const NAME = "VALUE"; // не працює ) // але if (1) ( define("NAME", "VALUE"); // працює )

#2 const завжди реєстрозалежна

const завжди регістро-залежна, в той час як define() дозволяє зробити регістро-незалежні константи:

Define("NAME", "VALUE", true); echo NAME; // VALUE echo name; // VALUE

#3 const розуміє лише скаляри

Це справедливо тільки для версій PHP 5.6 і нижче.

const не можна передати змінні, функції, вирази, а define() можна:

Const FOO = $ var; // Parse error const FOO = home_url (); // Parse error define("FOO", $ var); // Немає помилок define("FOO", home_url()); // Немає помилок

#4 const може зберігати масиви з версії PHP 5.6, а define з PHP 7.0

const FOO =; // працює у PHP 5.6 define("FOO", ); // не працює PHP 5.6, працює в PHP 7.0
Підсумки порівняння

Визначати константу майже завжди краще за допомогою define(), тому що тут більше можливостей і менше варіантів «зловити» помилку... Виняток - це коли у вас версія PHP 5.6 і вам потрібно зберегти масив у константу, тут допоможе const.

Константи PHP класу

Оголошуються лише за допомогою const. Правила для них такі як описано вище: приймають лише скаляри, не розуміють PHP змінні, функції, вирази...

Постійні класи завжди загальнодоступні - немає статусу private чи protected.

Оголошена константа належить саме класу, вона належить жодному об'єкту і є спільної попри всі об'єкти (примірники) класу.

Class My_Class ( const NAME = "VALUE"; // починаючи з PHP 5.6 можна використовувати математичні вирази const SEC_PER_DAY = 60 * 60 * 24; function print_name() ( // звернення до константи класу всередині методу через self (сам клас) echo self ::NAME; ) ) // звернення до константи поза класом // можна викликати з глобальної області видимості без ініціалізації екземпляра класу echo My_Class::NAME;

Константи для класів дуже схожі на статичні властивості класу.

Class My_Class ( const NAME = "VALUE"; static $name = "VALUE";; ) echo My_Class::NAME; echo My_Class::$name;

«Чарівні» константи

І на завершення згадаємо про особливі константи PHP...

У PHP є дев'ять магічних констант, які змінюють своє значення залежно від контексту, в якому вони використовуються. Наприклад, значення __LINE__ залежить від рядка в скрипті, де ця константа вказана. Усі "чарівні" константи дозволяються під час компіляції, на відміну від звичайних констант, які дозволяються під час виконання. Спеціальні константи нечутливі до регістру та їх список наведений нижче:

Константа Опис
__LINE__ Поточний номер рядка у файлі.
__FILE__ Повний шлях та ім'я поточного файлу, у якому викликається константа.
__DIR__ PHP 5.3.0. Директорія файлу, де використовується константа. Те саме що dirname(__FILE__) . Не має слеша наприкінці, крім кореневої директорії.
__FUNCTION__ Ім'я функції.
__CLASS__ Назва класу. Це ім'я містить назву простору імен, в якому клас був оголошений (наприклад, Foo Bar). Також працює у трейтах. При використанні методів трейтів є ім'ям класу, у якому ці методи використовується.
__TRAIT__ PHP 5.4.0. Ім'я Трейт. Це ім'я містить назву простору імен, в якому трейт був оголошений (наприклад, Foo Bar).
__METHOD__ Ім'я методу класу.
__NAMESPACE__ PHP 5.3.0. Назва поточного простору імен.
ClassName::class PHP 5.5.0. Повне ім'я класу (із зазначенням простору імен). Також дивіться: class.

Константа – це ідентифікатор (ім'я) для простого значення. Як випливає з назви, їхнє значення не може зміниться в ході виконання скрипта (крім магічних констант, які насправді не є константами). Імена констант за промовчанням чутливі до регістру. За ухваленою угодою, імена констант завжди пишуться у верхньому регістрі.

Ім'я константи має відповідати тим самим правилам іменування, що й інші імена PHP. Правильне ім'я починається з літери або символу підкреслення, за яким слідує будь-яка кількість літер, цифр та символів підкреслення. Регулярний вираз для перевірки правильності імені константи має такий вигляд: ^*$

Можна визначити константи за допомогою функції define()зарезервованими чи навіть некоректними іменами, значення яких можуть бути (тільки) отримані через функцію constant(). Однак робити це не рекомендується.

Приклад #1 Правильні та неправильні імена констант

// Правильні імена констант
define ("FOO", "щось");
define ("FOO2", "щось ще");
define ("FOO_BAR", "щось більше");

// Неправильні імена констант
define ("2FOO", "щось");

// Це правильне оголошення, але краще не використовувати:
// PHP одного разу може зареєструвати чарівну константу,
// яка порушить роботу скрипту
define ("__FOO__", "щось");

?>

Зауваження: Поняття "літери" тут - це символи a-z, A-Z, та інші символи з ASCII-кодами від 128 до 255 (0x80-0xff).

2 years ago

Performance of constants. PHP 7.1.10 32 bits (Opcache active, windows 10 i7-64bits) but apparently the trends is the same with the 5.x

using a constant declared by DEFINE("CNS",value) : 0.63575601577759s
using a constant declared by const CNS=value: 0.61372208595276s
using a variable declared by $v=value: 0.51184010505676s

У середовищі, використання DEFINE і CONST є за допомогою самої з деякою вагомою можливістю виконання CONST instead of DEFINE. Хоча, за допомогою variable is around 10-50% better than to use a constant. So, для performance intensive task, constant is not the best option.

$ p1 = microtime (true);
$ x = 0;
for($i=0;$i<50000000;$i++) {
$x+=CNS;
}
$ p2 = microtime (true);

14 years ago

An undefined constant evaluates as true when not used correctly. Say for example you had something like this:

settings.php
// Debug mode
define ("DEBUG", false);
?>

test.php
include("settings.php");

if (DEBUG) (
// Echo some sensitive data.
}
?>

Якщо для певної відповіді settings.php немає, included and DEBUG constant is not set, PHP will STILL print the sensitive data. The solution is to evaluate it.

settings.php
// Debug mode
define ("DEBUG", 0);
?>

test.php
include("settings.php");

if (DEBUG == 1 ) (
// Echo some sensitive data.
}
?>

Now it works correctly.

Зустрічаються випадки, коли змінні досить незручно використовуватиме постійного зберігання якихось певних значень, які змінюються протягом роботи програми. Такими значеннями можуть бути математичні константи, шляхи до файлів, різноманітні паролі тощо. Саме для цих цілей у PHP передбачена така конструкція, як.

називається іменована величина, яка не змінюється у процесі виконання програми (скрипта).

У РНР константи визначаються функцією define(). Ця функція має такий формат:

define ($name, $value, $case_sen), де:

$name- Ім'я константи;
$value- Значення константи;
$case_sen- необов'язковий параметр логічного типу,
вказує, чи слід враховувати регістр літер (true) чи ні (false).

Приклад визначення та використання констант у PHP:


echo pi;
// Виводить 3.14
?>

Якщо параметр $case_senдорівнює true, то інтерпретатор враховуватиме регістр символів під час роботи з константою. Зверніть увагу, що константи використовуються без попереднього знаку $ .

Відмінності між константами та змінними:

    Констант не має приставки у вигляді знака долара ( $ );

    Константи можна визначити лише за допомогою функції define(), а чи не привласненням значення;

    Константи можуть бути визначені та доступні в будь-якому місці без урахування області видимості;

    Константи не можуть бути визначені або анульовані після початкового оголошення;

    Константи можуть мати лише скалярні значення.

Перевірка існування констант

Для перевірки константи можна використовувати функцію defined(). Ця функція повертає true, якщо константу оголошено. Наведемо приклад:

// Оголошуємо константу pi
define ("pi", 3.14, true);
if (defined ("pi")== true ) echo "Константа pi оголошена!";
// Скрипт виведе "Константа pi оголошена!"
?>

Зумовлені константи PHP

У PHP існують такі визначені константи:

PHP надає великий список зумовлених констант для кожного скрипта, що виконується. Багато з цих констант визначаються різними модулями і будуть присутні лише в тому випадку, якщо ці модулі доступні в результаті динамічного завантаження або статичного складання.

Є п'ять зумовлених констант, які змінюють значення залежно від контексту, в якому вони використовуються. Наприклад, константа __LINE__залежить від рядка в скрипті, де ця константа вказана. Спеціальні константи нечутливі до регістру та їх список наведений нижче:

Ім'я Опис
__LINE__ Поточний рядок у файлі.
__FILE__ Повний шлях та ім'я поточного файлу.
__DIR__ Повідомлення про файл. Якщо вона включена в включені, то в directory of the included file is returned. Це є equivalent to dirname(__FILE__). Це directory name does не має trailing slash unless it is root directory.
__FUNCTION__ Ім'я функції. (Додано в PHP 4.3.0.)
__CLASS__ Назва класу. (Додано в PHP 4.3.0.)
__TRAIT__ Trait name. Trait name включатиме namespace it був declarated in (e.g. Foo \ Bar).
__METHOD__ Ім'я методу класу. (Додано в PHP 5.0.0)
__NAMESPACE__ Назва поточного namespace.

Додатково

У цій нотатці мова йтиме про константів. Як завжди розберемося з самим поняттям константи в мовах програмування і подивимося, як оголошуються та використовуються константи у PHP.

Поняття константа та константи в PHP

Слово константа має бути вам уже знайоме з математики:

“Математична константа- величина, значення якої змінюється.”

Теж саме і в PHP. Константа у PHP- це ідентифікатор, який служить для позначення простого значення (рядок, число якесь), яке не може змінюватися в процесі виконання коду.

Для оголошення константи (присвоєння їй значення) використовується функція define. Приклад оголошення константи:

Імена констант у PHP чутливі до регістру (великі та маленькі літери різняться), так що потрібно бути уважнішими. Також є угода, що імена констант завжди пишуться у верхньому регістрі.

Ім'я константи має починатися з літери або символу підкреслення "_" і може складатися з букв, цифр та підкреслення.

Розглянемо простий приклад використання константи:

У цьому прикладі ми оголосили константу та використали її у програмі.

Навіщо використовуються константи і чи не простіше використовувати змінні?

Як було зазначено, константи що неспроможні змінити свого значення процесі виконання програми. У константах зазвичай зберігають постійні параметри сайту, такі як реквізити доступу до бази даних (хост, логін та пароль користувача, ім'я бази даних), розташування сайту на диску та багато інших параметрів.

Якщо ми будемо використовувати змінні, то скрип може випадково (у разі помилки) змінити значення змінної і працювати не так, як ви задумали.

Використання констант гарантує, що значення, яке ви вказали при оголошенні константи, залишиться незмінним.

© 2022 androidas.ru - Все про Android