Як присвоюється значення константі у мові php. Стандартні константи PHP. Перевірка існування константи

27.10.2019 Огляди

У цій замітці розберемося, в чому різниця в оголошенні 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() . Ця функція має такий формат:

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

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

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

define("pi", 3.14, true);
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 надає великий список зумовлених констант для кожного скрипта, що виконується. Багато з цих констант визначаються різними модулями і будуть присутні лише в тому випадку, якщо ці модулі доступні в результаті динамічного завантаження або статичного складання.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Всім доброго доби. На зв'язку Олексій Гулинін. Минулої статті ми розібрали оператор еквівалентності в PHP. У цій статті я хотів би розповісти про константах у PHP. У школі ви не раз зустрічали константи, наприклад "число PI" або з фізики універсальна постійна газова (R). Константи один раз визначають і вони вже не змінюються. Те саме стосується констант у програмуванні, тобто. ми один раз визначаємо константу і вона більше не змінюється у програмному коді. Константами може бути різні математичні величини, шляху до файлів.

Чим константа відрізняється від змінної:

1) Її визначають один раз і ніде більше не можна присвоїти значення,
2) Щоб до неї звернутися, не потрібно ставити знак "$" перед нею (тут є мінус - тепер ми не можемо використовувати ім'я константи у текстовому рядку).
Давайте виведемо константу "PI":

Константи бувають двох типів: обумовлені інтерпретатором та обумовлені користувачем:

Приклади констант, що визначаються інтерпретатором:

1) __FILE__ - зберігає ім'я файлу, в якому знаходиться той код, який зараз виконується,
2) PHP_VERSION - версія інтерпретатора PHP,
3) PHP_OS - версія операційної системи, під якою працює PHP.

Наберіть наступний код і перегляньте, які константи ще бувають:

Можна визначати власні константи, робиться це за допомогою оператора define . Давайте визначимо 2 константи:

"; echo Const2; ?>

В даному випадку у нас виведуться значення цих констант.

За промовчанням регістр символів в імені константи враховується, його можна вимкнути за допомогою необов'язкового третього параметра, наприклад:

"; echo neW1; ?>

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

Зверніть увагу на лапки, в яких пишеться ім'я константи. Це обов'язково треба робити. Також не можна створювати константи з однаковими іменами.

У PHP можна перевірити чи існує константа чи ні за допомогою функції defined(ім'я константи). Давайте розберемо на прикладі, щоб стало зрозуміло:

Наберіть цей приклад і подивіться, що буде.


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


У PHP ім'я змінної завжди починається зі знака долара ($), за яким обов'язково має слідувати буква, після якої можна використовувати букви, цифри та знак підкреслення. Імена чутливі до регістру знаків, тобто. змінні $value, $Value, $VALUE і $VaLuE - чотири РОЗНИХ змінних, хоча їх ім'я і читається однаково.

Приклади синтаксично правильних імен змінних:

Приклад некоректних імен:

Є одне загальне правило(Для всіх мов програмування), що стосується іменування змінних. Правило дуже просте: імена повинні бути осмисленими.

Приклад коду, що погано читається

Короткість, звичайно, сестра таланту, але жертвувати простотою сприйняття коду заради його компактності – нерозумно. Тим більше, що довжина імені ніяк не впливає на продуктивність скрипту. Але не варто і впадати в протилежну крайність – давати змінним занадто довгі імена. Якщо ім'я має складатися з двох і більше слів – частини імені потрібно виділяти великими літерамиабо розділяти підкреслення. Наприклад, ім'я $strusernameadndomainнабагато краще сприймається у вигляді $str_UserNameAndDomain.

Приклад коду, що добре читається

Змінні бувають двох видів: звичайні змінні(Змінні-значення) та посилальні змінні. Ключова відмінність між ними полягає у способі обробки даних. При присвоєння значення нормальної змінної значення повністю копіюється, тобто. створюється новий блокпам'яті, куди міститься копія вихідного значення. При подальшій роботівсі зміни відображатимуться на цій копії, а не на вихідних даних.

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

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

Передача змінних за значенням

Для роботи зі змінними є в PHP спеціальні функції:

  • isset() - перевіряє, чи була оголошена змінна і відрізняється її значення від NULL;
  • empty() - аналог isset()
  • unset() - вбудована функція мови, що видаляє значення змінної та видаляє саму змінну зі списку доступних змінних (знищує змінну).

Область видимості змінних

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

Блоками програми у разі є " скрипт " , " функція " чи " клас " . Наприклад:

Начебто все правильно, але – не працює. Чому? Тому що якщо явно не сказати, що змінна $name всередині функції - це глобальна змінна $name, то інтерпретатор створити тимчасову копію змінної з ім'ям $name і порожнім значенням. Оскільки значення порожнє (невизначене), те й результат складання рядків буде неопределенный (порожній).

Виправити положення дуже легко, достатньо додати лише один рядок (виділена жирним шрифтом):

global $name; // Очевидно вказуємо, що // використовувати глобальну змінну.$fullName = $name. $family; echo "Ім'я всередині функції: ".$fullName; ) echo "Ім'я ДО виклику функції: ".$name; //результат: "Ім'я ДО виклику функції: Вася" tryChengeName("Іванов"); // результат: "Ім'я всередині функції: Вася Іванов" echo "Ім'я ПІСЛЯ виклику функції: ".$name; // Результат: "Ім'я ПІСЛЯ виклику функції: Вася Іванов"?>

У даному прикладізмінна $name має область видимості, рівну всьому скрипту, а змінна $fullName, оголошена всередині функції, має область визначення рівну цієї функції. Це означає, що при виході їх функції змінна $fullName буде знищена, а всі спроби прочитати її значення призведуть до помилки.

Приклади роботи з класами ми розглянемо у розділі "Класи та спадкування".

Змінні змінні

Так-так, тут немає помилки, саме так (двома словами) називаються деякі змінні в PHP. Сенс у тому, що текстова частина імені змінної (тобто ім'я без знака долара) може сама бути ім'ям. Наприклад:

Настійно не рекомендується користуватися подібними прийомами без необхідності. Код, напханий такими трюками, дуже складно супроводжувати. Особливо це важливо під час роботи з даними, що вводяться користувачами. Головна причина складнощів – неявні залежності. Наприклад, що трапиться, якщо замість імені "Вася" написати щось на зразок """""_;%//^q""? Правильно! Скрипт здебільшого не зможе виконатися! Можна, звичайно, додати купу перевірок на наявність "неправильних" символів, але простіше взагалі не користуватися такими трюками.

Константи

Константа - це певна постійна величина. Константа оголошується одночасно з ім'ям та значенням. Для оголошення константи служить функція define(), а визначення наявності константи (тобто. було визначено чи ні) - функція defined(). Ім'я константи будується за тими самими правилами, як і імена змінних.

Приклади констант:

Окремий вид констант PHP - звані " магічні константи " . Це системні константи, значення яких визначає та встановлює інтерпретатор. Таких констант небагато:

  • __LINE__ Містить номер поточного рядкау поточному файлі.
  • __FILE__ Містить повне ім'я поточного файлу
  • __FUNCTION__ Містить назву поточної функції.
  • __CLASS__ Містить ім'я поточного класу.
  • __METHOD__ Містить ім'я поточного методу поточного класу.

Ці константи дуже зручні при налагодженні, але в інших випадках їх краще не використовувати, замінюючи на виклики відповідних функцій.