PHP Manual

Особливе значення лапок

22. 08. 2019

Obsah článku

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

В деяких контекстах використання лапок може бути небезпечним, тому всюди використовуйте апострофи. Лапки доречні лише в особливих випадках..

Символ | Ім'я | Ім'я | |------|----------- | Лапки. | Апостроф.

Приклад перший - той самий результат

echo "Здрастуй, світ!"; // це те саме
echo 'Здрастуй, світ!'; // ось так.

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

Поєднання лапок та апострофів

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

echo 'Мій улюблений колір - "червоний"!';

Якби я використовував "повернення каретки" для розділення рядка, що виводиться, то було б неоднозначно, де рядок "починається", а де закінчується, тому я використав "апострофи" для розділення рядка, що вирішило цю проблему.

Вставка лапок в рядок, розділений лапками

Іноді виникають ситуації, коли мені потрібно перерахувати і "лапки", і "апостроф" в одному рядку. Можна використовувати не тільки конкатенацію двох рядків, але і так зване усічення символів.

echo "Цей рядок \"містить\" лапки.";

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

Змінна всередині рядка

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

$color = 'Червоний';
echo "Moje oblíbená barva je {$color}, a tvoje?";

Набагато безпечнішими є апострофи, які не дозволяють цього зробити і потрібно складати рядок:

$color = 'Червоний';
echo 'Мій улюблений колір' . $color . 'а твоя?';

Корисні звички

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

Крім того, PHP є веб-мовою, тобто використовується для генерації HTML-документів, де лапки є дуже поширеним явищем саме тому, що вони також використовуються для генерації частин HTML-коду. Особисто я рекомендую звикнути до суворого використання апострофів скрізь, бо тоді не треба буде пам'ятати, що саме ви вкладаєте.

Поведінка лапок

Обережно! Не викидайте лапки повністю! Вони мають деякі особливі переваги, які можуть бути корисними для просунутої роботи з PHP - однак новачки вважають їх помилками і не розуміють їх.

$x = 10; // встановити змінну
echo "Hodnota proměnné je: $x, přesně."; // і лістинг

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

$price = 25; // ціна в доларах
echo "Cena produktu: $price\$"; // виводить "Ціна товару: $25"

Перевага лапок в даному випадку є сумнівною і, можливо, краще використовувати апострофи і просто зв'язати рядки.

$price = 25;
echo 'Ціна товару:' . $price . '$'; // виводить те саме, що і в попередньому прикладі

Примітка: Ціна в доларах коректно записується у форматі $25, що викликало б ще більшу плутанину, оскільки позначення $$price насправді називає щось, що називається змінною змінною (в імені змінної ми називаємо ім'я змінної, яку викликаємо - просто плутанина).

Порада: Вас може зацікавити змінна змінна.

Позначення рядка

Взагалі, все, що знаходиться в лапках або апострофах, розглядається як рядок. Таким чином:

$x = 5; // це щось інше,
$x = "5"; // ніж це.

У першому випадку у змінній $x зберігається число 5, у другому випадку у цій же змінній зберігається рядок "5". На щастя, в PHP це не має значення, і ви можете працювати з обома варіантами (майже) однаково, тому що PHP може автоматично перетворювати змінні відповідно до їх вмісту. Однак, як правило, рекомендується не писати числа в лапках, особливо для обчислювальних операцій, де можуть виникнути помилки округлення.

Іноді мені може знадобитися зберігати вихід функції у змінній:

$pi = 3.14159;
$zaokrouhleni = round($pi); // це правильно
$zaokrouhleni = "round($pi)"; // це "неправильно" (питання в тому, якого результату я очікую).

Помилка в другому випадку якраз в лапках, коли вихід функції round() зберігається не в змінній $round, а в рядку, що викликає цю функцію.

Значення $pi не обов'язково вводити безпосередньо в скрипт таким чином, і ми можемо використовувати функцію pi(), яка є більш точною для більш складних розрахунків.

Особливе значення втечі

Попередження: Наступні приклади працюють тільки в лапках, якщо ви візьмете їх в апострофи, вони будуть поводитися як звичайні символи без спеціального значення (за винятком \', який випускає апостроф). Екранування потрібне для того, щоб вивести якийсь спеціальний символ всередині лапок або апостроф, який може бути інтерпретований як мовний вираз і, отже, оброблений, навіть якщо програміст цього не мав на увазі. Ми вже показували приклад; у цьому розділі описані можливі поведінкові винятки.

Тому що іноді сама втеча несе в собі особливий сенс. Приклад:

echo "Довгий текст, розділений на два рядки.";

Попередній приклад друкується:

Dlouhý text, rozdělený na
dva řádky.

Отже, якщо ми хочемо виписати скісну риску, ми також повинні її екранувати (екранувати символ n в даному випадку не потрібно, тому що він буде сприйматися як знову ж таки обгортка, або в даному випадку ми не повинні екранувати взагалі):

echo "Довгий текст, розділений на два рядки.";

Існують і інші спеціальні символи, наприклад, \t робить табуляцію. З повним переліком можна ознайомитися в офіційній документації.

Реальне використання спеціальних символів в екрануванні

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

Наприклад, якщо ми хочемо розібрати текст по рядках, ми можемо використовувати функцію explode.

$parser = explode("\n", $retezec); // розбирає текст по рядках

В даному випадку використання спеціального символу \n має сенс, тому що ми можемо дуже ефектно сказати, що хочемо виконати розбір по переведенням рядка.

$parser = explode('
', $retezec);

Попередження:** В системах Unix і Windows символи, що використовуються для позначення кінця рядків, переплутані. Наприклад, Windows використовує CRLF (пара символів \r\n), в той час як Linux використовує тільки LF (один символ \n). При розборі по рядках це слід мати на увазі. Зазвичай проблема вирішується нормалізацією символів тільки до LF.

Резюме

Якщо це можливо, використовуйте апострофи всюди.

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

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
3.
Status:
All systems normal.
2024