Інтернет Windows Android

Php лапки, лапки одинарні, подвійні, екранування. У чому різниця між одинарними і подвійними лапками в PHP? Подвійні лапки в php

Рядок - це набір символів. У PHP символ це те ж саме, що і байт, це означає, що можливо рівно 256 різних символів. Це також означає, що PHP не має вбудованої підтримки Unicode "а. Деяку підтримку Unicode" а забезпечують функції utf8_encode () і utf8_decode ().

Зауваження: Немає жодних проблем, якщо рядок дуже велика. Практично не існує обмежень на розмір рядків, що накладаються PHP, так що немає абсолютно ніяких причин турбуватися про їх довжині.

синтаксис

    Рядок може бути визначена трьома різними способами.

одинарні лапки

Найпростіший спосіб визначити рядок - це укласти її в одинарні лапки (символ ").

Щоб використовувати одинарні лапки всередині рядка, як і в багатьох інших мовах, її необхідно попередити символом зворотної косої риски (\\), т. Е. Екранувати її. Якщо зворотна коса риска повинна йти перед одинарною лапкою або бути в кінці рядка, вам необхідно продублювати її. Зверніть увагу, що якщо ви спробуєте екранувати будь-який інший символ, зворотна коса риска також буде надрукована! Так що, як правило, немає необхідності екранувати саму зворотну косу риску.

Зауваження: У PHP 3 в даному випадку буде видане повідомлення рівня E_NOTICE.

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

Echo "це проста рядок"; echo "Також ви можете вставляти в рядки символ нового рядка таким чином, оскільки це нормально"; // Виведе: Одного разу Арнольд сказав: "I" ll be back "echo" Одного разу Арнольд сказав: "I \\" ll be back ""; // Виведе: Ви видалили C: \\ *. *? echo "Ви видалили C: \\\\ *. *?"; // Виведе: Ви видалили C: \\ *. *? echo "Ви видалили C: \\ *. *?"; // Виведе: Це не вставить: \\ n новий рядок echo "Це не вставить: \\ n новий рядок"; // Виведе: Змінні $ expand також $ either не підставляти echo "Змінні $ expand також $ either не підставляти";

Подвійні лапки

Якщо рядок укладена в подвійні лапки ( "), PHP розпізнає більшу кількість керуючих послідовностей для спеціальних символів:

Таблиця 11-1. керуючі послідовності

Повторюємо, якщо ви захочете мнемнонізіровать будь-який інший символ, зворотна коса риска також буде надрукована!

Але найважливішим властивістю рядків у подвійних лапках є обробка змінних. Дивіться докладніше: обробка рядків.

Heredoc

Інший спосіб визначення рядків - це використання heredoc-синтаксису ( "

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

Увага

Дуже важливо відзначити, що рядок з закриває ідентифікатором не містить інших символів, за винятком, можливо, крапки з комою (;). Це означає, що ідентифікатор не повинен вводитися з відступом і що не може бути ніяких прогалин або знаків табуляції до або після крапки з комою. Важливо також розуміти, що першим символом перед закриває ідентифікатором повинен бути символ нового рядка, визначений у вашій операційній системі. Наприклад, на Macintosh це \\ r.

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

Heredoc-текст поводиться так само, як і рядок в подвійних лапках, при цьому їх не маючи. Це означає, що вам немає необхідності екранувати лапки в heredoc, але ви як і раніше можете використовувати перераховані вище керуючі послідовності. Змінні обробляються, але із застосуванням складних змінних всередині heredoc потрібно бути також уважним, як і при роботі з рядками.

Приклад 11-2. Приклад визначення heredoc-рядки

$ Str \u003d<<foo \u003d "Foo"; $ This-\u003e bar \u003d array ( "Bar1", "Bar2", "Bar3"); )) $ Foo \u003d new foo (); $ Name \u003d "МоеІмя"; echo<<foo. Тепер я виводжу ($ foo-\u003e bar). Це повинно вивести велику літеру "A": \\ x41 EOT;

Зауваження: Підтримка heredoc була додана в PHP 4.

Обробка змінних

Якщо рядок визначається в подвійних лапках, або за допомогою heredoc, змінні всередині неї обробляються.

Існує два типи синтаксису: простий і складний. Простий синтаксис більш легкий і зручний. Він дає можливість обробки змінної, значення масиву (array) або властивості об'єкта (object).

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

простий синтаксис

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

$ Beer \u003d "Heineken"; echo "$ beer" s taste is great "; // працює," "" це невірний символ для імені змінної echo "He drank some $ beers"; // не працює, "s" це вірний знак для імені змінної echo "He drank some $ (beer) s"; // працює echo "He drank some ($ beer) s"; // працює

Точно також можуть бути оброблені елемент масиву (array) або властивість об'єкта (object). В індексах масиву закриває квадратна дужка (]) позначає кінець визначення індексу. Для властивостей об'єкта застосовуються ті ж правила, що і для простих змінних, хоча з ними неможливий трюк, як зі змінними.

// Ці приклади специфічно про використання масивів всередині // рядків. Поза рядків завжди укладайте рядкові ключі вашого // масиву в лапки і не використовуйте поза рядків (дужки). // Давайте покажемо всі помилки error_reporting (E_ALL); $ Fruits \u003d array ( "strawberry" \u003d\u003e "red", "banana" \u003d\u003e "yellow"); // Працює, але зауважте, що поза лапок рядки це працює по-іншому echo "A banana is $ fruits."; // Працює echo "A banana is ($ fruits [" banana "])."; // Працює, але PHP, як описано нижче, спочатку шукає // константу banana. echo "A banana is ($ fruits)."; // Чи не працює, використовуйте фігурні дужки. Це викличе помилку обробки. echo "A banana is $ fruits [" banana "]."; // Працює echo "A banana is". $ Fruits [ "banana"]. "."; // Працює echo "This square is $ square-\u003e width meters broad."; // Не працює. Для вирішення см. Складний синтаксис. echo "This square is $ square-\u003e width00 centimeters broad.";

Для чого-небудь більш складного ви повинні використовувати складний синтаксис.

Складний (фігурний) синтаксис

Він називається складним не тому, що важкий в розумінні, а тому що дозволяє використовувати складні вирази.

Фактично, ви можете включити будь-яке значення, що знаходиться в просторі імені в рядку з цим синтаксисом. Ви просто записуєте вираз таким же чином, як і поза рядки, а потім укладаєте його в (і). Оскільки ви не можете екранувати "(", цей синтаксис буде розпізнаватися тільки коли $ слід безпосередньо за (. (Використовуйте "(\\ $" або "\\ ($" щоб відобразити "($"). Кілька пояснювальних прикладів:

// Давайте покажемо всі помилки error_reporting (E_ALL); $ Great \u003d "fantastic"; // Чи не працює, виведе: This is (fantastic) echo "This is ($ great)"; // Працює, виведе: This is fantastic echo "This is ($ great)"; echo "This is $ (great)"; // Працює echo "Цей квадрат шириною ($ square-\u003e width) 00 сантиметрів."; // Працює echo "Це працює: ($ arr)"; // Це невірно з тієї ж причини, що і $ foo невірно поза // рядка. Іншими словами, це як і раніше буде працювати, // але оскільки PHP спочатку шукає константу foo, це викличе // помилку рівня E_NOTICE (невизначена константа). echo "Це неправильно: ($ arr)"; // Працює. При використанні багатовимірних масивів, всередині // рядків завжди використовуйте фігурні дужки echo "Це працює: ($ arr [" foo "])"; // Працює. echo "Це працює:". $ Arr [ "foo"]; echo "Ви навіть можете записати ($ obj-\u003e values-\u003e name)"; echo "Це значення змінної на ім'я $ name: ($ ($ name))";

Доступ до символу в рядку і його зміна

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

Зауваження: Для забезпечення зворотної сумісності, ви як і раніше маєте можливість використовувати в тих же цілях дужки масиву. Однак, починаючи з PHP 4, цей синтаксис небажаний для використання.

Приклад 11-3. Кілька прикладів рядків

// Отримання першого символу рядка $ str \u003d "Це тест."; $ First \u003d $ str (0); // Отримання третього символу рядка $ third \u003d $ str (2); // Отримання останнього символу рядка $ str \u003d "Це все ще тест."; $ Last \u003d $ str (strlen ($ str) -1); // Зміна останнього символу рядка $ str \u003d "Подивися на море"; $ Str (strlen ($ str) -1) \u003d "я";

Корисні функції і оператори

Рядки можуть бути об'єднані за допомогою оператора "." (крапка). Зверніть увагу, оператор додавання "+" тут не працює. Додаткову інформацію дивіться в розділі Строкові оператори.

Для модифікації рядків існує безліч корисних функцій.

Основні функції описані в розділі строкових функцій, функції регулярних виразів для розширеного пошуку та заміни (в двох частинах: Perl і POSIX розширений).

Також існують функції для URL-рядків, і функції для шифрування / дешифрування рядків (mcrypt і mhash).

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

Перетворення в рядок

Ви можете конвертувати в рядок, використовуючи приведення (string), або функцію strval (). У виразах, де необхідна рядок, перетворення відбувається автоматично. Це відбувається, коли ви використовуєте функції echo () або print (), або коли ви порівнюєте значення змінної з рядком. Прочитання розділів керівництва Типи і Маніпуляції з типами зробить наступне зрозумілішим. Дивіться також settype ().

Булево (boolean) значення TRUE перетворюється в рядок "1", а значення FALSE представляється як "" (порожній рядок). Цим способом ви можете перетворювати значення в обидві сторони - з булева типу в строковий і навпаки.

Ціле (integer) або число з плаваючою точкою (float) перетворюється в рядок, представлений числом, що складається з його цифр (включаючи показник ступеня для чисел з плаваючою точкою).

Масиви завжди перетворюються в рядок "Array", так що ви не можете відобразити вміст масиву (array), використовуючи echo () або print (), щоб дізнатися, що він містить. Щоб переглянути один елемент, вам потрібно зробити щось на кшталт echo $ arr [ "foo"]. Дивіться нижче поради про те, як відобразити / переглянути весь вміст.

Об'єкти завжди перетворюються в рядок "Object". Якщо ви хочете вивести значення змінної-члена об'єкта (object) з метою налагодження, прочитайте наступні абзаци. Якщо ви хочете отримати ім'я класу необхідного об'єкта, використовуйте get_class ().

Ресурси завжди перетворюються в рядки зі структурою "Resource id # 1", де 1 - це унікальний номер ресурсу (resource), присвоєний йому PHP під час виконання. Якщо ви хочете отримати тип ресурсу, використовуйте.

NULL завжди перетворюється в порожній рядок.

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

Ви також можете перетворити значення PHP в рядки для постійного зберігання. Цей метод називається сериализацией і може бути виконаний за допомогою функції serialize (). Крім того, якщо у вашій установці PHP є підтримка WDDX, ви можете серіалізовать значення PHP в структури XML.

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

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

Рядок буде розпізнано як float, якщо вона містить будь-який із символів ".", "E", або "E". Інакше вона буде визначена як ціле.

Значення визначається по початковій частині рядка. Якщо рядок починається з вірного числового значення, буде використано це значення. Інакше значенням буде 0 (нуль). Вірне числове значення - це одна або більше цифр (що можуть містити десяткову точку), за бажанням попереджання знаком, з подальшим необов'язковим показником ступеня. Показник ступеня - це "e" або "E" з подальшими однією або більше цифрами.

$ Foo \u003d 1 + "10.5"; // $ foo це float (11.5) $ foo \u003d 1 + "-1.3e3"; // $ foo це float (-1299) $ foo \u003d 1 + "bob-1.3e3"; // $ foo це integer (1) $ foo \u003d 1 + "bob3"; // $ foo це integer (1) $ foo \u003d 1 + "10 Small Pigs"; // $ foo це integer (11) $ foo \u003d 4 + "10.2 Little Piggies"; // $ foo це float (14.2) $ foo \u003d "10.0 pigs" + 1; // $ foo це float (11) $ foo \u003d "10.0 pigs" + 1.0; // $ foo це float (11)

Більш детальну інформацію про це перетворенні дивіться в розділі про strtod (3) документації Unix.

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

Echo "\\ $ foo \u003d\u003d $ foo; тип:". gettype ($ foo). "
\\ N ";

Не очікуйте отримати код символу, перетворивши його в ціле (як ви могли б зробити, наприклад, в C). Для перетворення символів в їх коди і назад використовуйте функції ord () і

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

Я просто знаю, що в.NET або мовою Сі, якщо він в одинарних лапках, це означає, що це символ, а не рядок.

Рішення

Те, що ви повинні знати,

$ A \u003d "name"; $ B \u003d "my $ a"; \u003d\u003d "my name" $ \u200b\u200bc \u003d "my $ a"; ! \u003d "My name"

У PHP люди використовують одинарні лапки для визначення постійної рядки, наприклад "a", "my name", "abc xyz" при використанні подвійної лапки для визначення рядка, що містить ідентифікатор, такий як "a $ b $ c $ d",

І інша справа,

Echo "my name";

швидше за

Echo "my name";

Echo "my". $ A;

повільніше, ніж

Echo "my $ a";

Це вірно для інших використовуваних рядків.

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

$ Test \u003d "variable"; echo "Hello Mr $ test"; // the output would be: Hello Mr variable echo "Hello Mr $ test"; // the output would be: Hello Mr $ test

Тут лапки аналізує значення, а одинарна лапка розглядається як строкове значення (без розбору змінної $ test.)

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

зауваження: У PHP 7.0.0 на 64-бітних платформах немає будь-яких досяжних обмежень для довжини рядка, в 32-бітних системах і в більш ранніх версіях PHP, рядки не можуть бути більше 2 ГБ (2147483647 байт).

синтаксис

Рядок може бути визначена чотирма різними способами:

  • одинарними лапками
  • подвійними лапками
  • nowdoc-синтаксисом (починаючи з PHP 5.3.0)

одинарні лапки

Найпростіший спосіб визначити рядок - це укласти її в одинарні лапки (символ " ).

Щоб використовувати одинарні лапки всередині рядка, проекраніруйте її зворотним слешем ( \ ). Якщо необхідно написати сам зворотний слеш, продублюйте його ( \\ ). Всі інші випадки застосування зворотного слеша будуть інтерпретовані як звичайні символи: це означає, що якщо ви спробуєте використовувати інші керуючі послідовності, такі як \\ r або \\ n, Вони будуть виведені як є замість будь-якого особливого поведінки.

echo "Це проста рядок";

echo "Також ви можете вставляти в рядки
символ нового рядка ось так,
це нормально"
;

// Виводить: Одного разу Арнольд сказав: "I" ll be back "
echo "Одного разу Арнольд сказав:" I \\ "ll be back" ";

Echo "Ви видалили C: \\\\ *. *?";

// Виводить: Ви видалили C: \\ *. *?
echo "Ви видалили C: \\ *. *?" ;

// Виводить: Це не буде розгорнуто: \\ n новий рядок
echo "Це не буде розгорнуто: \\ n новий рядок";

// Виводить: Змінні $ expand також $ either не розгорталася
echo "Змінні $ expand також $ either не розгорталася";
?>

Подвійні лапки

Якщо рядок укладена в подвійні лапки ( "), PHP розпізнає наступні керуючі послідовності спеціальних символів:

керуючі послідовності
послідовність значення
\\ n новий рядок (LF або 0x0A (10) в ASCII)
\\ r повернення каретки (CR або 0x0D (13) в ASCII)
\\ t горизонтальна табуляція (HT або 0x09 (9) в ASCII)
\\ v вертикальна табуляція (VT або 0x0B (11) в ASCII) (з PHP 5.2.5)
\\ e escape-знак (ESC або 0x1B (27) в ASCII) (з PHP 5.4.4)
\\ f подача сторінки (FF або 0x0C (12) в ASCII) (з PHP 5.2.5)
\\ зворотна коса риска
\$ знак долара
\" лапки
\{1,3} послідовність символів, що відповідає регулярному виразу символу в вісімковій системі числення, який мовчки переповнюється, щоб поміститися в байт (тобто "\\ 400" \u003d\u003d\u003d "\\ 000")
\\ X (1,2) послідовність символів, що відповідає регулярному виразу символу в шістнадцятковій системі числення
\\ U (+) послідовність символів, що відповідає регулярному виразу символу Unicode, яка відображається в рядок в поданні UTF-8 (додано в PHP 7.0.0)

Як і в рядку, укладеної в одинарні лапки, екранування будь-якого символу виведе також і сам символ екранування. До версії PHP 5.1.1, зворотний слеш в \\ ($ Var) не друкували.

Heredoc

Третій спосіб визначення рядків - це використання heredoc-синтаксису: <<< . Після цього оператора необхідно вказати ідентифікатор, потім новий рядок. Після цього йде сама рядок, а потім цей же ідентифікатор, що закриває вставку.

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

Увага

Дуже важливо відзначити, що рядок з закриває ідентифікатором не повинна містити інших символів, за винятком крапки з комою ( ; ). Це означає, що ідентифікатор не повинен вводитися з відступом і що не може бути ніяких прогалин або знаків табуляції до або після крапки з комою. Важливо також розуміти, що першим символом перед закриває ідентифікатором повинен бути символ нового рядка, визначений у вашій операційній системі. Наприклад, в UNIX системах, включаючи macOS, це \\ n. Після закриває ідентифікатора також відразу повинна починатися новий рядок.

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

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

class foo (
public $ bar \u003d<<bar
EOT;
// відступ перед закриває ідентифікатором неприпустимий
}
?>

Приклад # 2 Приклад правильного синтаксису

class foo (
public $ bar \u003d<<bar
EOT;
}
?>

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

Heredoc-текст поводиться так само, як і рядок в подвійних лапках, при цьому їх не маючи. Це означає, що вам немає необхідності екранувати лапки в heredoc, але ви як і раніше можете використовувати перераховані вище керуючі послідовності. Змінні обробляються, але із застосуванням складних змінних всередині heredoc потрібно бути також уважним, як і при роботі з рядками.

Приклад # 3 Приклад визначення heredoc-рядки

$ Str \u003d<<Приклад рядка,
охоплює кілька рядків,
з використанням heredoc-синтаксису.
EOD;

Class foo
{
var $ foo;
var $ bar;

Function __construct ()
{
$ This -\u003e foo \u003d "Foo";
$ This -\u003e
}
}

$ Foo \u003d new foo ();
$ Name \u003d "Ім'ярек";

echo<<Мене звуть "$ name". Я друкую $ foo -\u003e foo .
Тепер я виводжу
($ Foo -\u003e bar [1]) .
Це повинно вивести велику літеру "A": \\ x41
EOT;
?>

Мене звуть "Ім'ярек". Я друкую Foo. Тепер, я виводжу Bar2. Це повинно вивести велику літеру "A": A

Також можливо використовувати heredoc-синтаксис для передачі даних через аргументи функції:

Починаючи з версії 5.3.0, стала можливою інціалізація статичних змінних і властивостей / констант класу за допомогою синтаксису heredoc:

Приклад № 5 Використання heredoc для інціалізаціі статичних змінних

// Статичні змінні
function foo ()
{
static $ bar \u003d<<Тут нічого нема...
LABEL;
}

// Константи / властивості класу
class foo
{
const BAR \u003d<<Приклад використання константи
FOOBAR;

Public $ baz \u003d<<Приклад використання поля
FOOBAR;
}
?>

Починаючи з PHP 5.3.0, можна також оточувати ідентифікатор Heredoc подвійними лапками:

Nowdoc

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

Nowdoc вказується тією ж послідовністю <<< , Що використовується в heredoc, але наступний за нею ідентифікатор полягає в одинарні лапки, наприклад, <<<"EOT" . Всі умови, які діють для ідентифікаторів heredoc також дійсні і для nowdoc, особливо ті, що відносяться до закриває ідентифікатором.

Приклад # 7 Приклад використання nowdoc

echo<<<"EOD"
Приклад тексту,
займає кілька рядків,
за допомогою синтаксису nowdoc. Зворотні слеші завжди обробляються буквально,
наприклад, \\\\ і \\ ".
EOD;

Результат виконання даного прикладу:

Приклад тексту, який займає кілька рядків, за допомогою синтаксису nowdoc. Зворотні слеші завжди обробляються буквально, наприклад, \\\\ і \\ ".

Приклад # 8 Nowdoc string quoting example with variables

/ * Більш складний приклад зі змінними. * /
class foo
{
public $ foo;
public $ bar;

Function __construct ()
{
$ This -\u003e foo \u003d "Foo";
$ This -\u003e bar \u003d array ( "Bar1", "Bar2", "Bar3");
}
}

$ Foo \u003d new foo ();
$ Name \u003d "Ім'ярек";

echo<<<"EOT"
Мене звуть "$ name". Я друкую $ foo-\u003e foo.
Тепер я друкую ($ foo-\u003e bar).
Це не повинно вивести заголовну "A": \\ x41
EOT;
?>

Результат виконання даного прикладу:

Мене звуть "$ name". Я друкую $ foo-\u003e foo. Тепер я друкую ($ foo-\u003e bar). Це не повинно вивести заголовну "A": \\ x41

Приклад # 9 Приклад використання статичних даних

class foo (
public $ bar \u003d<<<"EOT"
bar
EOT;
}
?>

зауваження:

Підтримка nowdoc була додана в PHP 5.3.0.

Обробка змінних

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

Існує два типи синтаксису: простий і складний. Простий синтаксис більш легкий і зручний. Він дає можливість обробки змінної, значення масиву ( array) Або властивості об'єкта ( object) З мінімумом зусиль.

Складний синтаксис може бути визначений за фігурним дужках, оточуючим вираз.

простий синтаксис

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

$ Juice \u003d "apple";

echo "He drank some $ juice juice." . PHP_EOL;

// Некоректно. "S" - вірний символ для імені змінної, але змінна має ім'я $ juice.
echo "He drank some juice made of $ juices." ;

// Коректно. Строго зазначений кінець імені змінної за допомогою дужок:
echo "He drank some juice made of $ (juice) s." ;
?>

Результат виконання даного прикладу:

He drank some apple juice. He drank some juice made of. He drank some juice made of apples.

Аналогічно можуть бути оброблені елемент масиву ( array) Або властивість об'єкта ( object). В індексах масиву закриває квадратних дужок ( ] ) Позначає кінець визначення індексу. Для властивостей об'єкта застосовуються ті ж правила, що і для простих змінних.

Приклад # 10 Приклад простого синтаксису

define ( "KOOLAID", "koolaid1");
$ Juices \u003d array ( "apple", "orange", "koolaid1" \u003d\u003e "purple");

echo "He drank some $ juices [0] juice." . PHP_EOL;
echo "He drank some $ juices [1] juice." . PHP_EOL;
echo "He drank some $ juices [koolaid1] juice." . PHP_EOL;

class people (
public $ john \u003d "John Smith";
public $ jane \u003d "Jane Smith";
public $ robert \u003d "Robert Paulsen";

Public $ smith \u003d "Smith";
}

$ People \u003d new people ();

echo "$ people -\u003e john drank some $ juices [0] juice." . PHP_EOL;
echo "$ people -\u003e john then said hello to $ people -\u003e jane." . PHP_EOL;
echo "$ people -\u003e john" s wife greeted $ people -\u003e robert. ". PHP_EOL;
echo "$ people -\u003e robert greeted the two $ people -\u003e smiths." ; // Чи не спрацює
?>

Результат виконання даного прикладу:

He drank some apple juice. He drank some orange juice. He drank some purple juice. John Smith drank some apple juice. John Smith then said hello to Jane Smith. John Smith "s wife greeted Robert Paulsen. Robert Paulsen greeted the two.

У PHP 7.1.0 додана підтримка негативних числових індексів.

Приклад # 11 Негативні числові індекси

$ String \u003d "string";
echo "Символ з індексом -2 дорівнює$ String [- 2]. ", PHP_EOL;
$ String [- 3] \u003d "o";
echo "Зміна символу на позиції -3 на" o "дає наступний рядок:$ String. ", PHP_EOL;
?>

Результат виконання даного прикладу:

Символ з індексом -2 дорівнює n. Зміна символу на позиції -3 на "o" дає наступний рядок: strong

Для чого-небудь більш складного, використовуйте складний синтаксис.

Складний (фігурний) синтаксис

Він називається складним не тому, що важкий в розумінні, а тому що дозволяє використовувати складні вирази.

Будь-яка скалярна змінна, елемент масиву або властивість об'єкта, що відображається в рядок, може бути представлена \u200b\u200bв рядку цим синтаксисом. Просто запишіть вираз так само, як і поза рядки, а потім його між { і } . оскільки { не може бути екранований, цей синтаксис буде розпізнаватися тільки коли $ слід безпосередньо за { . використовуйте {\$ , Щоб надрукувати {$ . Кілька пояснювальних прикладів:

// Показуємо всі помилки
error_reporting (E_ALL);

$ Great \u003d "здорово";

// Чи не працює, виводить: Це (здорово)
echo "Це ($ great)";

// Працює, виводить: Це здорово
echo "Це ($ great)";

// Працює
echo "Цей квадрат шириною($ Square -\u003e width) 00 сантиметрів. ";

// Працює, ключі, укладені в лапки, працюють тільки з синтаксисом фігурних дужок
echo "Це працює: ($ arr [" key "])";

// Працює
echo "Це працює: ($ arr [4] [3])";

// Це невірно з тієї ж причини, що і $ foo поза
// рядка. Іншими словами, це як і раніше буде працювати,
// але оскільки PHP спочатку шукає константу foo, це викличе
// помилку рівня E_NOTICE (невизначена константа).
echo "Це не правильно:($ Arr [foo] [3]) ";

// Працює. При використанні багатовимірних масивів всередині
// рядків завжди використовуйте фігурні дужки
echo "Це працює: ($ arr [" foo "] [3])";

// Працює.
echo "Це працює:". $ Arr [ "foo"] [3];

echo "Це теж працює:($ Obj -\u003e values \u200b\u200b[3] -\u003e name) ";

echo "Це значення змінної на ім'я$ Name: ($ ($ name)) ";

echo "Це значення змінної на ім'я, яке повертає функція getName ():($ (GetName ())) ";

echo "Це значення змінної на ім'я, яке повертає \\ $ object-\u003e getName ():($ ($ Object -\u003e getName ())) ";

// Чи не працює, виводить: Це те, що повертає getName (): (getName ())
echo "Це те, що повертає getName (): (getName ())";
?>

За допомогою цього синтаксису також можливий доступ до властивостей об'єкта всередині рядків.

class foo (
var $ bar \u003d "I am bar." ;
}

$ Foo \u003d new foo ();
$ Bar \u003d "bar";
$ Baz \u003d array ( "foo", "bar", "baz", "quux");
echo "($ foo -\u003e $ bar) \\ n";
echo "($ foo -\u003e ($ baz [1])) \\ n";
?>

Результат виконання даного прикладу:

I am bar. I am bar.

зауваження:

Функції, виклики методів, статичні змінні класів, а також константи класів працює всередині {$} , Починаючи з версії PHP 5. Однак, визначене значення буде оброблено як ім'я змінної в тому ж контексті, що і рядок, в якій вона визначається. Використання одинарних фігурних дужок ( {} ) Не працюватиме для доступу до значень функцій, методів, констант класів або статичних змінних класу.

// Показуємо всі помилки
error_reporting (E_ALL);

class beers (
const softdrink \u003d "rootbeer";
public static $ ale \u003d "ipa";
}

$ Rootbeer \u003d "A & W";
$ Ipa \u003d "Alexander Keith \\" s ";

// Це працює, виводить: Я б хотів A & W
echo "Я б хотів ($ (beers :: softdrink)) \\ n";

// Це теж працює, виводить: Я б хотів Alexander Keith "s
echo "Я б хотів ($ (beers :: $ ale)) \\ n";
?>

Доступ до символу в рядку і його зміна

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

зауваження: починаючи з PHP 7.1.0, підтримуються негативні значення зсуву. Вони задають зміщення з кінця рядка. Раніше негативні зміщення викликали помилку рівня E_NOTICE при читанні (повертаючи порожній рядок) або E_WARNING при запису (залишаючи рядок без змін).

зауваження: До символу в рядку також можна звертатися за допомогою фігурних дужок, наприклад, $ str (42).

Увага

Спроба запису в зміщення за межами рядки доповнить рядок пробілами до цього зміщення. Нецілі типи буде перетворені в цілі. Невірний тип зміщення викличе помилку рівня E_WARNING. Використовується тільки перший символ присвоюються рядки. Починаючи з PHP 7.1.0, привласнення порожнього рядка викличе фатальну помилку. Раніше в такому випадку присвоювався нульовий байт (NULL).

Увага

Рядки в PHP внутрішньо являють собою масиви байт. Як результат, доступ або зміна рядка по зсуву небезпечно з точки зору багатобайтові кодування, і має виконуватися тільки з рядками в однобайтовим кодуваннях, таких як, наприклад, ISO-8859-1.

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

Приклад # 12 Кілька прикладів рядків

// Отримання першого символу рядка
$ Str \u003d "This is a test." ;
$ First \u003d $ str [0];

// Отримання третього символу рядка
$ Third \u003d $ str [2];

// Отримання ланцюжка довжиною
$ Str \u003d "This is still a test." ;
$ Last \u003d $ str [strlen ($ str) - 1];

// Зміна ланцюжка довжиною
$ Str \u003d "Look at the sea";
$ Str [strlen ($ str) - 1] \u003d "e";

?>

Починаючи з PHP 5.4 зміщення в рядку повинно здаватися або цілим числом, або рядком, що містить цифри, інакше буде видаватися попередження. Раніше зміщення, заданий рядком виду "Foo", Без попереджень перетворювалося в 0 .

Приклад # 13 Відмінності між PHP 5.3 і PHP 5.4

$ Str \u003d "abc";

Var_dump ($ str [ "1"]);
var_dump (isset ($ str [ "1"]));

Var_dump ($ str [ "1.0"]);
var_dump (isset ($ str [ "1.0"]));

Var_dump ($ str [ "x"]);
var_dump (isset ($ str [ "x"]));

Var_dump ($ str [ "1x"]);
var_dump (isset ($ str [ "1x"]));
?>

Результат виконання даного прикладу в PHP 5.3:

string (1) "b" bool (true) string (1) "b" bool (true) string (1) "a" bool (true) string (1) "b" bool (true)

Результат виконання даного прикладу в PHP 5.4:

string (1) "b" bool (true) Warning: Illegal string offset "1.0" in /tmp/t.php on line 7 string (1) "b" bool (false) Warning: Illegal string offset "x" in / tmp / t.php on line 9 string (1) "a" bool (false) string (1) "b" bool (false)

зауваження:

Спроба завантажити змінним інших типів (виключаючи масиви або об'єкти, що реалізують певні інтерфейси) за допомогою або {} мовчки поверне NULL.

зауваження:

У PHP 5.5 була додана підтримка використовувати символи в строкових літералах за допомогою синтаксису або {} .

Для модифікації рядків існує безліч корисних функцій.

Основні функції описані в розділі строкових функцій, а для розширеного пошуку та заміни - функції Perl-сумісних регулярних виразів.

Перетворення в рядок

Значення може бути перетворено в рядок за допомогою приведення (String), Або функції strval (). У виразах, де необхідна рядок, перетворення відбувається автоматично. Це відбувається, коли ви використовуєте функції echo або print, Або коли значення змінної порівнюється з рядком. Прочитання розділів керівництва Типи і Маніпуляції з типами зробить наступне зрозумілішим. Дивіться також settype ().

Масиви завжди перетворюються в рядок "Array", Так що ви не можете відобразити вміст масиву ( array), Використовуючи echo або print, Щоб дізнатися, що він містить. Щоб переглянути окремий елемент, використовуйте щось на зразок echo $ arr [ "foo"]. Дивіться нижче поради про те, як відобразити / переглянути весь вміст.

Для перетворення змінної типу "Object" в тип string використовується магічний метод __toString.

значення NULL завжди перетворюється в порожній рядок.

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

Більшість значень в PHP може бути перетворено в рядок для постійного зберігання. Цей метод називається сериализацией і може бути виконаний за допомогою функції serialize ().

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

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

Якщо рядок не містить будь-якої із символів ".", "E", або "E", і значення числа поміщається в межі цілих чисел (певних PHP_INT_MAX), Рядок буде розпізнано як ціле число ( integer). У всіх інших випадках вона вважається числом з плаваючою точкою ( float).

Значення визначається по початковій частині рядка. Якщо рядок починається з вірного числового значення, буде використано це значення. Інакше значенням буде 0 (нуль). Вірне числове значення - це одна або більше цифр (що можуть містити десяткову точку), за бажанням попереджання знайомий з подальшим необов'язковим показником ступеня. Показник ступеня - це "e" або "E" з подальшими однією або більше цифрами.

$ Foo \u003d 1 + "10.5"; // $ foo це float (11.5)
$ Foo \u003d 1 + "-1.3e3"; // $ foo це float (-1299)
$ Foo \u003d 1 + "bob-1.3e3"; // $ foo це integer (1)
$ Foo \u003d 1 + "bob3"; // $ foo це integer (1)
$ Foo \u003d 1 + "10 Small Pigs"; // $ foo це integer (11)
$ Foo \u003d 4 + "10.2 Little Piggies"; // $ foo це float (14.2)
$ Foo \u003d "10.0 pigs" + 1; // $ foo це float (11)
$ Foo \u003d "10.0 pigs" + 1.0; // $ foo це float (11)
?>

Більш детальну інформацію про це перетворенні дивіться в розділі про strtod (3) документації Unix.

Якщо ви хочете протестувати будь-який із прикладів цього розділу, скопіюйте та вставте його і наступний рядок, щоб побачити, що відбувається:

echo "\\ $ foo \u003d\u003d $ foo; тип:". gettype ($ foo). "
\\ N ";
?>

Не очікуйте отримати код символу, перетворивши його в ціле (як це робиться, наприклад, в C). Для перетворення символів в їх ASCII-коди і назад використовуйте функції ord () і chr ().

Подробиці реалізації строкового типу

7 years ago

The documentation does not mention, but a closing semicolon at the end of the heredoc is actually interpreted as a real semicolon, and as such, sometimes leads to syntax errors.

$ Foo \u003d<<abcd
END;
?>

This does not:

foo (<<abcd
END;
);
// syntax error, unexpected ";"
?>

Without semicolon, it works fine:

foo (<<abcd
END
);
?>

3 years ago

You can use string like array of char (like C)

$ A \u003d "String array test";

var_dump ($ a);
// Return string (17) "String array test"

var_dump ($ a);
// Return string (1) "S"

// - With array cast -
var_dump ((array) $ a);
// Return array (1) (\u003d\u003e string (17) "String array test")

var_dump ((array) $ a);
// Return string (17) "S"

Norihiori

15 years ago

You can use the complex syntax to put the value of both object properties AND object methods inside a string. For example ...
class Test (
public $ one \u003d 1;
public function two () (
return 2;
}
}
$ Test \u003d new Test ();
echo "foo ($ test -\u003e one) bar ($ test -\u003e two ())";
?>
Will output "foo 1 bar 2".

However, you can not do this for all values \u200b\u200bin your namespace. Class constants and static properties / methods will not work because the complex syntax looks for the "$".
class Test (
const ONE \u003d 1;
}
echo "foo (Test :: ONE) bar";
?>
This will output "foo (Test :: one) bar". Constants and static properties require you to break up the string.

3 years ago

Beware that consistent with "String conversion to numbers":

If ( "123abc" \u003d\u003d 123) echo "(Intstr \u003d\u003d int) incorrectly tests as true.";

// Because one side is a number, the string is incorrectly converted from intstr to int, which then matches the test number.

// True for all conditionals such as if and switch statements (probably also while loops)!

// This could be a huge security risk when testing / using / saving user input, while expecting and testing for only an integer.

// It seems the only fix is \u200b\u200bfor 123 to be a string as "123" so no conversion happens.

?>

6 years ago

Leading zeroes in strings are (least-surprise) not treated as octal.
Consider:
$ X \u003d "0123" + 0;
$ Y \u003d 0123 + 0;
echo "x is $ x, y is $ y"; // prints "x is 123, y is 83"
in other words:
* Leading zeros in numeric literals in the source-code are interpreted as "octal", c.f. strtol ().
* Leading zeros in strings (eg user-submitted data), when cast (implicitly or explicitly) to integer are ignored, and considered as decimal, c.f. strtod ().

10 years ago

Here is an easy hack to allow double-quoted strings and heredocs to contain arbitrary expressions in curly braces syntax, including constants and other function calls:

// Hack declaration
function _expr ($ v) (return $ v;)
$ _Expr \u003d "_expr";

// Our playground
define ( "qwe" , "Asd");
define("Zxc", 5 );

$ a= 3 ;
$ b= 4 ;

function c($ a, $ b) (Return$ a+ $ b; }

// Usage
echo"pre{ $ _expr(1 + 2 )} post \\ n "; // outputs "pre 3 post"
echo"pre{ $ _expr(qwe)} post \\ n "; // outputs "pre asd post"
echo"pre{ $ _expr(c($ a, $ b)+ zxc* 2 )} post \\ n "; // outputs "pre 17 post"

// General syntax is ($ _expr (...))
?>

2 years ago

I though that it would be helpful to add this comment so that the information at least appears on the right page on the PHP site.

Note that if you intend to use a double-quoted string with an associative key, you may run into the T_ENCAPSED_AND_WHITESPACE error. Some regard this as one of the less obvious error messages.

An expression such as:

$ fruit\u003d Array (
"A"=> "Apple",
"B"=> "Banana",
// etc
);

Print "This is a$ fruit[ "A"] "; // T_ENCAPSED_AND_WHITESPACE
?>

will definitely fall to pieces.

You can resolve it as follows:

print"This is a$ fruit[ a] " ; // unquote the key
print"This is a${ fruit[ "A"]} " ; // Complex Syntax
print"This is a{ $ fruit[ "A"]} " ; // Complex Syntax variation
?>

I have a personal preference for the last variation as it is more natural and closer to what the expression would be like outside the string.

It's not clear (to me, at least) why PHP misinterprets the single quote inside the expression but I imagine that it has something to do with the fact quotes are not part of the value string - once the string is already being parsed the quotes just get in the way ...?

2 years ago

Both should work :(

classTesting{
public static
$ VAR= "Static";
public const VAR \u003d
"Const";

Public function sayHelloStatic() {
echo
"Hello:{ $ this:: $ VAR} " ;
}

Public function sayHelloConst() {
echo
"Hello:{ $ this:: VAR)" ; // Parse error: syntax error, unexpected ")", expecting "["
}
}

$ obj\u003d newTesting();
$ obj-> sayHelloStatic();
$ obj-> sayHelloConst();

3 years ago

Something I experienced which no doubt will help someone. . .
In my editor, this will syntax highlight HTML and the $ comment:

$ Html \u003d<<<"EOD"
$ comment
EOD;

Using this shows all the same colour:

$ Html \u003d<<$ comment
EOD;

making it a lot easier to work with

11 years ago

To save Your mind don "t read previous comments about dates;)

When both strings can be converted to the numerics (in ( "$ a"\u003e "$ b") test) then resulted numerics are used, else FULL strings are compared char-by-char:

var_dump("1.22" > "01.23" ); // bool (false)
var_dump("1.22.00" > "01.23.00" ); // bool (true)
var_dump("1-22-00" > "01-23-00" ); // bool (true)
var_dump((Float)"1.22.00" \u003e (Float)"01.23.00" ); // bool (false)
?>

Рядки в PHP обрамляются одинарними або подвійними лапками. Головна відмінність в тому, що в подвійні лапки можна підставити змінну:

Тепер ми можемо придумати ще одне рішення задачі з уроку Змінні в PHP:

$ title"; Echo"

$ content
"; ?>

Як PHP знаходить змінну в рядку?

Все просто. Пам'ятаєте, які символи можуть використовуватися в назві змінної? Це цифри, букви і підкреслення _.

Ось PHP і приймає за назву все, що знаходиться між символом $ і першим забороненим символом.

У наступному коді PHP неправильно визначить назву змінної і видасть помилку:

Результат в браузері:

Notice: Undefined variable: priceруб in D: \\ OpenServer \\ domains \\ сайт \\ index.php on line 3

Щоб PHP правильно визначив назву змінної в рядку, потрібно помістити її в фігурні дужки ():

Результат в браузері:

1499руб

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

Справа в тому, що подвійні лапки у багатьох викликають асоціацію "до цього рядка щось повинно підставлятися". Тому я рекомендую використовувати одинарні лапки для звичайного тексту, а подвійні - тільки коли в текст потрібно підставити змінну. приклад:

екранування лапок

Якщо вам потрібно помістити лапки всередину рядка, є 2 способи це зробити:

У другому прикладі зворотний слеш \\ екранує наступний за ним лапки, щоб PHP сприйняв її як рядок.

Як думаєте, що потрібно зробити, щоб вивести на екран тільки зворотний слеш? Адже він буде екранувати закриває лапки. Забавно, але потрібно написати другий слеш для екранізування першого:

Табуляція і перенесення рядка в подвійних лапках

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

Напишіть скрипт, який:
1. Створює змінну $ type зі значенням Гра.
2. Створює змінну $ name зі значенням "World of Warcraft" (з лапками).
3. Виводить обидві змінні всередині тега

. Між змінними повинен бути пробіл.

Який вид лапок використовувати для оформлення рядків - апострофи або класичні подвійні лапки?

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

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

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

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

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

Наведемо приклад використання одинарних лапок:
// Виведе: Проста рядок
echo "Проста рядок";
// Виведе: I "m here
echo "I \\" m here ";
// Виведе: Це не вставить: \\ n новий рядок
echo "Це не вставить: \\ n новий рядок";
// Виведе: Змінна $ example теж не підставить
echo "Змінна $ example теж не підставить"; Якщо рядок укладена в подвійні лапки ( "), PHP розпізнає більшу кількість керуючих послідовностей для спеціальних символів а також підставляє замість імені змінної в рядок її значення. Так само, як і з одинарними лапками, для того, щоб використовувати подвійні лапки всередині рядка, укладеного в подвійні лапки, їх необхідно випередити символом зворотної косої риски (\\).

Наведемо приклад використання подвійних лапок:
// Виведе: Проста рядок
echo "Проста рядок";
// Виведе: Фірма "Пролісок" "
echo "Фірма \\" Пролісок \\ "";
// Виведе: Це переведе на новий рядок
echo "Це переведе на новий рядок \\ n";
// Виведе: Мінлива підставить
$ Example \u003d "підставить";
echo "Змінна $ example"; Слід також пам'ятати, що послідовність "\\ n" (новий рядок), "\\ r" (повернення каретки) для звичайного тексту, а не для HTML. Так що в браузері Ви не побачите змін (лише у вихідному коді сторінки).

Давайте з'ясуємо, наскільки швидше одинарні лапки подвійних. Для замірів напишемо короткий тестовий скрипт, і відразу зауважимо, що якщо Ви у себе будете його тестувати, результати, які залежать від апаратної частини вашого ПК або сервера, будуть інші.
// Повертаємо мітку часу на початку циклу
$ Start \u003d microtime (true);
// Створюємо цикл цикл на 1 млн ітерацій
for ($ i \u003d 0; $ i< 1000000; $i++) {
$ Text \u003d "Тут символьний рядок";
}
// Обчислюємо витрачений час
$ Time \u003d (microtime (true) - $ start); Результат: 0.09 секунди.

Якщо ми замінимо одинарні лапки на подвійні:
$ Text \u003d "Тут символьний рядок"; Результат буде дорівнює 0.10 секунди.

Як бачимо, при використанні текстових рядків різниця в часі виконання зовсім невелика, навіть можна сказати і зовсім не існує. Найцікавіше почнеться, коли спробуємо поєднати рядок і змінну.
$ Text \u003d "Тут символьний рядок $ i"; або
$ Text \u003d $ i. "Тут символьний рядок"; Результат приблизно: 0.27 секунди.

Різниця досить відчутна. Конкатенація і подвійні лапки явно впливають на швидкодію, якщо в рядок додані змінні.

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