Константи в PHP
Константи - це дані, які зберігають своє значення під час усього виконання скрипта. На відміну від змінних, значення констант неможливо змінювати під час виконання скрипта та не можуть мати невизначене значення Null.

Слід зазначити, що РНР має низку наперед визначених констант: Null, True і False. Всі вони не залежать від регістру, тому в програмах можна зустріти різні записи, але стандарт кодування PSR вимагає, щоб вони вказувалися в нижньому регістрі.
При спробі перевизначити вже існуючу константу функція Define повертає значення False і буде виведено зауваження "Notice: Constant Name already defined". Після визначення константи змінити її ім’я неможливо.
Крім представлених вище констант, існує безліч зумовлених констант, оголошених у різних розширеннях. Привести їх повний список неможливо, крім того, їх набір залежить від підключених розширень і може змінюватися. У будь-якому випадку отримати повний список доступних констант можна за допомогою функції Get_defined_constants.
Використання відносних шляхів не залежить від сервера розміщення чи робочої станції, де ведеться розробка. Проєкт може бути розміщений у будь-якому каталозі, без необхідності переписати шляхи включення. Щоб підключити файли при використанні відносних шляхів, необхідно виконувати операції підняття або опускання на один або кілька рівнів вище або нижче поточної директорії. Батьківський каталог позначається двома крапками ".." і записуються так:
У сучасних РНР-додатках для вирішення цієї проблеми застосовують кілька прийомів. По-перше, намагаються використовувати одну точку входу, розташовану в корені проєкту. При цьому замість вказівки абсолютного шляху використовують наперед визначену константу __DIR__, що визначає поточний каталог скрипта.

Оголошення константи
Константи оголошуються за допомогою функції Define, яка приймає першим параметром рядок з ім’ям константи, у другому параметрі передається значення константи. Третій необов’язковий параметр визначає чутливість константи до регістру - якщо передати значення True, нова константа не залежатиме від регістру. У разі успішного створення константи функція Define повертає True, інакше повертається значення False.define('ACCESS', true);Значенням константи може бути логічне (Boolean), ціле (Integer), дійсне (Float), рядкове (String) чи масив (Array). Константи не можуть отримувати як значення об’єкти (Object) та дескриптори (Resource).Хоча допускається створення імені констант довільного регістру, зазвичай вони записуються у верхньому регістрі. Ця традиція пов’язана з тим, що в інших мовах програмування високого рівня константи та змінні ніяк не відрізняються одна від одної, тому правила гарного тону рекомендують відрізняти змінні та константи іменами у різних регістрах, щоб покращити читабельність програми.
<?php
define('NUM', 1);
define('STR', 'Hello, world!');
echo NUM; // 1
echo STR; // Hello, world!
echo Num; // Notice: Use of undefined constant Num - assumed 'Num'Як видно з прикладу, звертатися до констант можна за їхнім ім’ям, але, на відміну від змінних, вказувати символ $ перед ім’ям константи не потрібно. Якщо робиться спроба звернутися до неіснуючої константи - генерується зауваження "Notice: Use of undefined constant".Слід зазначити, що РНР має низку наперед визначених констант: Null, True і False. Всі вони не залежать від регістру, тому в програмах можна зустріти різні записи, але стандарт кодування PSR вимагає, щоб вони вказувалися в нижньому регістрі.
При спробі перевизначити вже існуючу константу функція Define повертає значення False і буде виведено зауваження "Notice: Constant Name already defined". Після визначення константи змінити її ім’я неможливо.
Перевірка існування константи
Перевірити наявність константи можна за допомогою оператора If та функції Define. Якщо константа існує, то функція поверне True. Однак цей варіант не дуже зручний, тому що створює константу, якщо вона не існує, і виводить зауваження, якщо константа вже визначена. Для перевірки існування константи існує окрема функція Defined, єдиним параметром якої є рядок з ім’ям константи. Повертає True, якщо константа існує, інакше повертається False:<?php
// Визначаємо константу
define('COLOR', 'red');
// Якщо константа існує, виводимо її значення
if (defined('COLOR')) echo COLOR; // redДинамічне ім’я константи
За допомогою конструкції $$ можна отримати динамічні імена змінних, для динамічного формування констант спеціальний синтаксис не передбачено, однак існує окрема функція Constant, яка приймає рядок з ім’ям константи та повертає її значення. Якщо константа з такою назвою не виявлена, повертається False і виводиться попередження "Warning: constant(): Couldn't find constant".<?php
define("COLOR", 'red');
echo COLOR;
echo constant("COLOR");У цьому прикладі обидва рядки, що виводять значення константи COLOR за допомогою прямого звернення та функції Constant - еквівалентні.Зумовлені константи
У PHP існує низка наперед визначених констант, значення яких виставляє інтерпретатор РНР: __LINE__ - поточний рядок у файлі; __FILE__ - повний шлях та ім’я поточного файлу; __FUNCTION__ - ім’я функції; __CLASS__ – ім’я класу; __METHOD__ - ім’я методу; __DIR__ - поточний каталог, у якому розташований скрипт; PHP_VERSION – версія інтерпретатора PHP; PHP_EOL – символ кінця рядка.Крім представлених вище констант, існує безліч зумовлених констант, оголошених у різних розширеннях. Привести їх повний список неможливо, крім того, їх набір залежить від підключених розширень і може змінюватися. У будь-якому випадку отримати повний список доступних констант можна за допомогою функції Get_defined_constants.
Абсолютний та відносний шлях до файлу
При підключенні до скрипту файлів слід вказати шлях до них. Розрізняють відносні та абсолютні шляхи від кореня диска.Використання відносних шляхів не залежить від сервера розміщення чи робочої станції, де ведеться розробка. Проєкт може бути розміщений у будь-якому каталозі, без необхідності переписати шляхи включення. Щоб підключити файли при використанні відносних шляхів, необхідно виконувати операції підняття або опускання на один або кілька рівнів вище або нижче поточної директорії. Батьківський каталог позначається двома крапками ".." і записуються так:
require_once '../classes/images.php';
require_once '../data/config.php';Чим більше рівнів вкладень, тим складнішими і довгими стають відносні шляхи, і тим кращі абсолютні шляхи, для яких не потрібно обчислювати рівень вкладення щодо поточного файлу.У сучасних РНР-додатках для вирішення цієї проблеми застосовують кілька прийомів. По-перше, намагаються використовувати одну точку входу, розташовану в корені проєкту. При цьому замість вказівки абсолютного шляху використовують наперед визначену константу __DIR__, що визначає поточний каталог скрипта.
require_once __DIR__ .'/classes/images.php';
require_once __DIR__ .'/data/config.php';Константи класу
Класи також можуть містити константи, які визначаються ключовим словом Const. Слід звернути увагу на те, що ключове слово Const використовується тільки в класах, для оголошення констант поза класами призначена функція Define.class ConstantClass
{
const STR = "Hello, world.";
}Так само як і у випадку зі статичними членами класів, до констант не можна звертатися за допомогою оператора "->". Для звертання використання оператор дозволу області видимості "::". Існування констант можна перевірити з допомогою функції Defined, яка повертає True, якщо константа існує, інакше - False.if (defined('ClassConstant::STR')) {
echo 'Константа визначена'; // true
}#самовчитель_php 