PHP: Кавычки
Строки в программировании используются очень часто и в самых разных ситуациях. С их помощью мы работаем с текстом, выводим сообщения на экран, обрабатываем пользовательский ввод и взаимодействуем с внешними системами.

С точки зрения PHP строка представляет собой просто набор символов, заключенный в кавычки. Посмотрим на примеры:
<?php
'Hello'
'Goodbye'
'G'
' '
''Все эти варианты являются строками.
'Hello','Goodbye'и'G'представляют собой строки из нескольких или одного символа' 'является строкой, состоящей из одного пробела''является пустой строкой, в ней нет ни одного символа. Играет такую же роль, как 0 в математике
То есть все, что находится внутри кавычек, считается строкой, даже если там только пробел или вообще ничего нет.
Если вывести строки на экран, то 'Hello' и 'Goodbye' будут хорошо заметны. Но ' ' и '' могут сбивать с толку, потому что вывод пустой строки выглядит как полное отсутствие, а строка с пробелом покажет «пустое место», которое визуально сложно отличить. При этом PHP четко различает их. Пустая строка означает отсутствие символов, тогда как строка с пробелом содержит конкретный символ пробела.
Контрольный вопрос. Это одинаковые строки или нет?
<?php
'хекслет'
' хекслет'Терминология. Строка или строчка?
В программировании есть терминологическая ловушка.
- Строка (string) является типом данных (то что разбирали выше), например
'hello'. - Строчка (line) является строкой текста в файле или в коде.
Например, в коде ниже есть строчка, но не строка.
<?php
print_r(5);Чтобы избежать путаницы, в этом курсе мы будем использовать такие формулировки.
- Строка, когда говорим о типе данных.
- Строчка, когда речь идет о строках кода.
Одинарные и двойные кавычки
В PHP строки можно записывать как в одинарных, так и в двойных кавычках:
<?php
print_r('Hello');
print_r("Hello");По умолчанию принято использовать одинарные кавычки ', если внутри строки не нужны возможности двойных. Этого стиля придерживаются многие стандарты оформления PHP-кода.
Проблема с кавычками внутри строки
Представьте, что вы хотите напечатать строку Dragon's mother. В ней есть апостроф ('s), совпадающий с символом одинарной кавычки. Попробуем так:
<?php
print_r('Dragon's mother');
// PHP Parse error: syntax error, unexpected 's' (T_STRING), expecting ',' or ')'PHP решит, что строка заканчивается после слова 'Dragon', а остальное не распознает как валидный код, что вызовет синтаксическую ошибку. Чтобы избежать этого, обернем строку в двойные кавычки:
<?php
print_r("Dragon's mother");Теперь PHP понимает, что одинарная кавычка внутри строки является обычным символом, а сама строка начинается и заканчивается двойными кавычками.
Если внутри строки нужны двойные кавычки, а снаружи одинарные, проблем тоже не будет:
<?php
print_r('He said "No"');Иногда в строке встречаются оба типа кавычек:
Dragon's mother said "No"В этом случае чтобы PHP не спутал кавычки внутри строки с внешними, используют символ экранирования, обратный слеш \. Он говорит интерпретатору, что следующий за ним символ является частью строки, а не управляющим символом:
<?php
print_r("Dragon's mother said \"No\"");
// => Dragon's mother said "No"Здесь мы экранируем двойные кавычки внутри строки, заключенной в двойные кавычки.
Обратите внимание, PHP воспринимает \" как один символ-кавычку, а не два символа. То же самое касается \', \\ и других подобных последовательностей. Они выглядят как два символа в коде, но в строке считаются за один.
То же самое работает и в обратном случае:
<?php
print_r('Dragon\'s mother said "No"');
// => Dragon's mother said "No"Как вывести обратный слеш
Чтобы вывести сам обратный слеш, его тоже нужно экранировать:
<?php
print_r("\\");
// => \Задание
Программа не нашла нужный файл и вывела сообщение с его названием. Напишите программу, которая выводит то же самое сообщение:
The file "user's_config.json" was not found.Строка содержит и апостроф, и двойные кавычки — выберите подходящий способ их записи.
Полезное
PHP: Кавычки
Строки в программировании используются очень часто и в самых разных ситуациях. С их помощью мы работаем с текстом, выводим сообщения на экран, обрабатываем пользовательский ввод и взаимодействуем с внешними системами.

С точки зрения PHP строка представляет собой просто набор символов, заключенный в кавычки. Посмотрим на примеры:
<?php
'Hello'
'Goodbye'
'G'
' '
''Все эти варианты являются строками.
'Hello','Goodbye'и'G'представляют собой строки из нескольких или одного символа' 'является строкой, состоящей из одного пробела''является пустой строкой, в ней нет ни одного символа. Играет такую же роль, как 0 в математике
То есть все, что находится внутри кавычек, считается строкой, даже если там только пробел или вообще ничего нет.
Если вывести строки на экран, то 'Hello' и 'Goodbye' будут хорошо заметны. Но ' ' и '' могут сбивать с толку, потому что вывод пустой строки выглядит как полное отсутствие, а строка с пробелом покажет «пустое место», которое визуально сложно отличить. При этом PHP четко различает их. Пустая строка означает отсутствие символов, тогда как строка с пробелом содержит конкретный символ пробела.
Контрольный вопрос. Это одинаковые строки или нет?
<?php
'хекслет'
' хекслет'Терминология. Строка или строчка?
В программировании есть терминологическая ловушка.
- Строка (string) является типом данных (то что разбирали выше), например
'hello'. - Строчка (line) является строкой текста в файле или в коде.
Например, в коде ниже есть строчка, но не строка.
<?php
print_r(5);Чтобы избежать путаницы, в этом курсе мы будем использовать такие формулировки.
- Строка, когда говорим о типе данных.
- Строчка, когда речь идет о строках кода.
Одинарные и двойные кавычки
В PHP строки можно записывать как в одинарных, так и в двойных кавычках:
<?php
print_r('Hello');
print_r("Hello");По умолчанию принято использовать одинарные кавычки ', если внутри строки не нужны возможности двойных. Этого стиля придерживаются многие стандарты оформления PHP-кода.
Проблема с кавычками внутри строки
Представьте, что вы хотите напечатать строку Dragon's mother. В ней есть апостроф ('s), совпадающий с символом одинарной кавычки. Попробуем так:
<?php
print_r('Dragon's mother');
// PHP Parse error: syntax error, unexpected 's' (T_STRING), expecting ',' or ')'PHP решит, что строка заканчивается после слова 'Dragon', а остальное не распознает как валидный код, что вызовет синтаксическую ошибку. Чтобы избежать этого, обернем строку в двойные кавычки:
<?php
print_r("Dragon's mother");Теперь PHP понимает, что одинарная кавычка внутри строки является обычным символом, а сама строка начинается и заканчивается двойными кавычками.
Если внутри строки нужны двойные кавычки, а снаружи одинарные, проблем тоже не будет:
<?php
print_r('He said "No"');Иногда в строке встречаются оба типа кавычек:
Dragon's mother said "No"В этом случае чтобы PHP не спутал кавычки внутри строки с внешними, используют символ экранирования, обратный слеш \. Он говорит интерпретатору, что следующий за ним символ является частью строки, а не управляющим символом:
<?php
print_r("Dragon's mother said \"No\"");
// => Dragon's mother said "No"Здесь мы экранируем двойные кавычки внутри строки, заключенной в двойные кавычки.
Обратите внимание, PHP воспринимает \" как один символ-кавычку, а не два символа. То же самое касается \', \\ и других подобных последовательностей. Они выглядят как два символа в коде, но в строке считаются за один.
То же самое работает и в обратном случае:
<?php
print_r('Dragon\'s mother said "No"');
// => Dragon's mother said "No"Как вывести обратный слеш
Чтобы вывести сам обратный слеш, его тоже нужно экранировать:
<?php
print_r("\\");
// => \Задание
Программа не нашла нужный файл и вывела сообщение с его названием. Напишите программу, которая выводит то же самое сообщение:
The file "user's_config.json" was not found.Строка содержит и апостроф, и двойные кавычки — выберите подходящий способ их записи.
Полезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Strings\Quotes;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = 'The file "user\'s_config.json" was not found.';
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
