Часті питання (FAQ): речі, які вам необхідно знати про простори імен. Створення констант у PHP — const і define() Як мені використовувати функції класів у просторах імен або константи у їхньому власному просторі імен

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

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

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

Дивіться також get_class(), get_object_vars(), file_exists()і function_exists().

Список змін

14 years ago

The difference between
__FUNCTION__ and __METHOD__ as in PHP 5.0.4 is that

FUNCTION__ returns only the name of the функція

while as __METHOD__ returns the name of the class alongwith the name of the функція

class trick
{
function doit()
{
echo __FUNCTION__;
}
function doitagain()
{
echo __METHOD__;
}
}
$obj=new trick();
$obj->doit();
output will be ---- doit
$obj->doitagain();
output will be ----- trick::doitagain

13 years ago

The __CLASS__ magic constant nicely complements the get_class() function.

Sometimes you need to know both:
- name of the inherited class
- name of the class actually executed

Тут ви знайдете, що показує можливу згоду:

Class base_class
{
function say_a()
{

" ;
}

Function say_b()
{

" ;
}

class derived_class extends base_class
{
function say_a()
{
parent :: say_a();
echo ""a" - said the ". __CLASS__. "
" ;
}

Function say_b()
{
parent :: say_b();
echo ""b" - said the ". get_class ($this). "
" ;
}
}

$obj_b = new derived_class();

$obj_b -> say_a();
echo "
" ;
$obj_b -> say_b();

?>

output should look roughly як це:

"a" - said the base_class
"a" - said the derived_class

"b" - said the derived_class
"b" - said the derived_class

3 years ago

Помітно, що невелика неспроможність при використанні __CLASS__ і __METHOD__ в traits (stand php 7.0.4): While __CLASS__ is working as advertized and returns dynamically the name of the class the trait is being used in, __METHOD__ w class name!

8 років тому

Вони не можуть реалізувати backwards compatible __DIR__ in versions prior to 5.3.0.

Тільки thing that you can do is to perform a recursive search and replace to dirname(__FILE__):
find. -type f-print0 | xargs -0 sed -i "s/__DIR__/dirname(__FILE__)/"

5 років тому

Багато поміток, що існують сумніви, що визначають __DIR__ magic constant для PHP versions не підтримують особливість. З курсу ви можете визначити цей magic constant для PHP versions не має цього constant, але це буде помітити, що він ставить себе як хтось You areВикористовуючи контент в included file, який може бути в різній directory у файлі, що визначає __DIR__ constant. Як таке, невпинно він ніби його *magic*, і мусить бути одним з тих, що необов'язково вам не потрібна вам, щоб мати всі ваші включення в саму директорію.

Concluding: eye catchup на gmail dot com"s note regarding whether you може або cannot define magic constants є valid, але стаття, що definition __DIR__ не є useless, is not!

7 років тому

Ви не можете виконати, якщо magic constant is defined. Це означає, що це не означає, що checking, якщо __DIR__ is defined then defining it. `defined("__DIR__")` always returns false. Defining __DIR__ will silently fail in PHP 5.3+. Це може спричинити compatibility issues if your script includes other scripts.

echo (defined ("__DIR__") ? "__DIR__ is defined" : "__DIR__ is NOT defined" . PHP_EOL );
echo (defined ("__FILE__") ? "__FILE__ is defined" : "__FILE__ is NOT defined" . PHP_EOL );
echo (defined ("PHP_VERSION") ? "PHP_VERSION is defined" : "PHP_VERSION is NOT defined" ) . PHP_EOL;
echo "PHP Version:". PHP_VERSION . PHP_EOL;
?>
Output:
__DIR__ is NOT defined
__FILE__ is NOT defined
PHP_VERSION is defined
PHP Version: 5.3.6

Зустрічаються випадки, коли змінні досить незручно використовуватиме постійного зберігання якихось певних значень, які змінюються протягом роботи програми. Такими значеннями можуть бути математичні константи, шляхи до файлів, різноманітні паролі тощо. Саме для цих цілей у 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 чутливі до регістру (великі та маленькі літери різняться), так що потрібно бути уважнішими. Також є угода, що імена констант завжди пишуться у верхньому регістрі.

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

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

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

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

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

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

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

Останнє оновлення: 1.11.2015

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

Для визначення константи використовується оператор define , що має таку форму: define(string $name, string $value, bool $case_sen=false) . Параметр $name передає назву константи, а параметр $value – її значення. Третій необов'язковий параметр набуває логічного значення true або false. Якщо значення дорівнює false, то при використанні константи враховуватиметься її регістр, якщо true - регістр не враховується. У нашому випадку третій параметр не використаний, тому він за промовчанням дорівнює false.

Після визначення константи ми можемо її використовувати так само, як і звичайну змінну. Єдиний виняток – ми не зможемо змінити її значення. Інша відмінність від змінної - не треба використовувати знак $. Тобто вираз NUMBER = 33; працювати не буде.

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

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

    FILE__ : зберігає повний шлях та ім'я поточного файлу

    LINE__ : зберігає поточний номер рядка, який обробляє інтерпретатор

    DIR__ : зберігає каталог поточного файлу

    FUNCTION__ : назва оброблюваної функції

    CLASS__ : назва поточного класу

    METHOD__ : назва оброблюваного методу

    NAMESPACE__ : назва поточного простору імен

Наприклад, виведемо поточний рядок, що виконується, і назву файлу:

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

Щоб перевірити, чи визначено константи, ми можемо використовувати опцію bool defined(string $name) . Якщо константа $name визначена, функція повертатиме значення true

Константи- Це значення, які не змінюються з часом. Ще зі школи Ви, напевно, знаєте багато константів, наприклад, число п, число 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. З масивами ми ще познайомимося, але думаю, що ті, хто працював з масивами в інших мовах програмування, без проблем дізнаються синтаксис. Що ж до інших констант, то з ними робота відбувається аналогічно.