|
string
это серия символов. В PHP символ
это то же самое, что и байт, то есть имеется точно
256 различных возможных символов. Это также предполагает, что в PHP нет встроенной поддержки Unicode.
Примечание: строки могут быть очень большими.
Практически нет ограничений на размер строк в PHP, поэтому нет никаких причин заботиться о длине строк.
Строковой литерал может специфицироваться тремя способами.
Простейший способ специфицировать строку - заключить её в одинарные кавычки (символ ').
Для специфицирования литеральной одинарной кавычки вам нужно мнемонизировать/escape её с помощью backslash
(\), как во многих других языках.
Если backslash должен появиться перед одинарной кавычкой или в конце строки, нужно его удвоить.
Обратите внимание, что если вы захотите мнемонизировать любой другой символ, backslash
также будет напечатан! Поэтому обычно нет необходимости мнемонизировать сам backslash.
Примечание: в PHP 3 при этом будет выведено предупреждение уровня
E_NOTICE.
Примечание:
в отличие от двух других видов синтаксиса, переменные здесь не
разворачиваются (не обсчитываются), когда находятся внутри строки, заключённой в одинарные кавычки.
echo 'Это простая строка.';
echo 'Вы можете также внедрять в строки символы newline,
как здесь.';
echo 'Arnold once said: "I\'ll be back"';
// на выходе: ... "I'll be back"
echo 'Are you sure you want to delete C:\\*.*?';
// на выходе: ... delete C:\*.*?
echo 'Are you sure you want to delete C:\*.*?';
// на выходе: ... delete C:\*.*?
echo 'I am trying to include at this point: \n a newline';
// на выходе: ... this point: \n a newline
|
Если строка заключена в двойные кавычки ("),
PHP понимает б́ольшее количество escape-последовательностей (мнемоник) специальных символов:
Таблица 6-1. Мнемоники символов
| последовательность |
значение |
|
\n
|
linefeed/прогон строки (LF или 0x0A (10) в ASCII) |
|
\r
|
carriage return/возврат каретки (CR или 0x0D (13) в ASCII) |
|
\t
|
horizontal tab/горизонтальная табуляция (HT или 0x09 (9) в ASCII) |
|
\\
|
backslash/обратная наклонная черта |
|
\$
|
знак dollar/доллар |
|
\"
|
double-quote/двойная кавычка |
|
\[0-7]{1,3}
|
последовательность символов, совпадающая с регулярным выражением,
символ в 8-ричной нотации |
|
\x[0-9A-Fa-f]{1,2}
|
последовательность символов, совпадающая с регулярным выражением, символ в 16-ричной нотации |
Ещё раз напоминает, что если вы захотите мнемнонизировать любой другой
символ, backslash также будет напечатан!
Но самым важным свойством строки, заключённой в двойные кавычки, является
то, что имена переменных разворачиваются.
См. разбор строк.
Другой способ ограничения строки - использовать синтаксис heredoc ("<<<").
После <<< необходимо предоставить идентификатор, затем строку, а затем - тот же
идентификатор как закрывающую кавычку.
Закрывающий идентификатор обязан начинаться в первом столбце строчки. Используемый идентификатор также обязан следовать тем же
правилам именования, что и все другие метки в PHP:
он может содержать только алфавитные символы, числа и символ подчёркивания и обязан начинаться с не-цифры или с символа подчёркивания.
| Предупреждение! |
|
Важно отметить, что строчка с закрывающим идентификатором не содержит
больше никаких символов, за исключением, возможно, точки с запятой (;).
Это означает, что идентификатор не может вводится с отступом
и что не может быть никаких пробельных символов и знаков табуляции до и после точки с запятой.
Самое, возможно, неприятное, что в конце строки не может быть также и символа carriage return (
\r), только form feed, AKA newline (\n).
Поскольку Microsoft Windows использует последовательность \r\n как терминатор строки, ваш heredoc может не сработать, если вы запишете ваш
скрипт в редакторе под Windows. Однако большинство
программ-редакторов дают возможность сохранять ваши файлы с терминатором строк UNIX.
|
Heredoc текст ведёт себя так же, как строка в двойных кавычках. Это
значит, что вам не нужно мнемонизировать кавычки в heredocs, но можно
продолжать использовать коды-мнемоники, перечисленные выше. Переменные
разворачиваются, но с комплексными переменными в heredoc нужно работать
так же внимательно, как и со строками.
Пример 6-2. Heredoc-пример строк в кавычках
<?php
$str = <<<EOD
Пример строки,
захватывающей несколько строчек,
с использованием синтаксиса heredoc.
EOD;
/* Более сложный пример, с переменными. */
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
|
|
Примечание:
поддержка heredoc была введена в PHP 4.
Когда строка специфицируется двойными кавычками или heredoc, переменные внутри неё разбираются.
Есть два типа синтаксиса:
простой и сложный.
Простой синтаксис более распространён и удобнее, он предоставляет способ
разбора переменной, переменной массива или свойства объекта.
Сложный синтаксис был введён в PHP 4 и может распознаваться по фигурным
скобкам {} вокруг выражения.
Если обнаружен знак dollar ($), разборщик захватывает как можно больше лексем для образования правильного
имени. Заключайте имя переменной в фигурные скобки, если вы хотите явным образом специфицировать конец имени.
$beer = 'Heineken';
echo "$beer's taste is great"; // не будет работать, "'" это неправильный
// символ для имён переменных (у меня работает - прим. пер.)
echo "He drunk some $beers"; // работает, 's' это правильный символ
// для имён переменных
echo "He drunk some ${beer}s"; // работает
|
Аналогично вы можете заставить разобрать индекс массива или свойство
объекта. В индексах массивов закрывающая квадратная скобка
(]) обозначает конец индекса. Для свойств объекта применяются те же правила, что и для простых переменных,
хотя со свойствами объекта невозможен трюк, как с переменными.
$fruits = array( 'strawberry' => 'red' , 'banana' => 'yellow' );
// заметьте, что это работает по-другому вне закавыченной строки.
echo "A banana is $fruits[banana].";
echo "This square is $square->width meters broad.";
// не будет работать. Для решения см. сложный синтаксис.
echo "This square is $square->width00 centimeters broad.";
|
Для чего-либо более сложного вы должны использовать сложный синтаксис.
Он называется сложным не потому, что сложен, а потому что вы можете включать таким способом сложные выражения.
Фактически вы можете включать любое значение, которое находится в
пространстве имён строки с этим синтаксисом. Вы просто записываете
выражение тем же способом, что и вне строки, а затем окружаете его
символами { и }. Поскольку вы не может заменить '{' мнемоникой, этот
синтаксис будет распознаваться, только когда $ идёт непосредственно после {.
(Используйте "{\$" или "\{$" для получения литерала "{$"). Вот некоторые примеры для пояснения:
$great = 'fantastic';
echo "This is { $great}"; // не будет работать, выведет: This is { fantastic}
echo "This is {$great}"; // работает, выведет: This is fantastic
echo "Это квадрат шириной {$square->width}00 сантиметров.";
echo "Это работает: {$arr[4][3]}";
// Неверно по той причине,
// что $foo[bar] неверно вне строки.
echo "Это неправильно: {$arr[foo][3]}";
echo "Вы должны сделать это так: {$arr['foo'][3]}";
echo "Вы можете даже записать {$obj->values[3]->name}";
echo "Это значение переменной $name: {${$name}}";
|
Можно получить доступ к символам в строке путём специфицирования смещения
с базой 0 в фигурных скобках для нужного символа.
Примечание:
для обеспечения обратной совместимости вы можете по-прежнему использовать скобки массива.
Однако этот синтаксис не рекомендуется, начиная с PHP 4.
Пример 6-3. Некоторые примеры строк
<?php
/* Присвоение строкового значения. */
$str = "This is a string";
/* Присоединение к ней. */
$str = $str . " with some more text";
/* Другой способ присоединения с мнемоникой для newline. */
$str .= " and a newline at the end.\n";
/* Эта строка будет выглядеть '<p>Number: 9</p>' */
$num = 9;
$str = "<p>Number: $num</p>";
/* А эта - '<p>Number: $num</p>' */
$num = 9;
$str = '<p>Number: $num</p>';
/* Получить первый символ строки */
$str = 'This is a test.';
$first = $str{0};
/* Получить последний символ строки */
$str = 'This is still a test.';
$last = $str{strlen($str)-1};
?>
|
|
Строки можно объединять (конкатенировать) с помощью операции '.' (точка).
Заметьте, что операция сложения '+' здесь не работает. См. также раздел
Строковые операции.
Имеется большое количество функций для работы со строками.
См. раздел строковых функций, функции
регулярных выражений для продвинутого поиска & замены (в двух частях:
Perl и POSIX расширенный).
Имеются также функции для работы с URL-строками и функции
для кодирования/декодирования строк (mcrypt и mhash).
Наконец, если вы ещё не нашли то, что нужно, посмотрите
функции для символьного типа.
Когда строка вычисляется как числовое значение, результирующее значение и его тип определяются так.
Строка вычисляется как
float
, если
содержит любой из символов '.', 'e' или 'E'. Иначе она вычисляется как integer.
Значение даётся по начальной части строки. Если строка начинается с
правильного числового значения, используется это значение. Иначе значение
будет 0 (нуль). Верным числовым символом является знак с последующими одной
или более цифрами (с возможной десятичной точкой), с последующей
необязательной экспонентой. Экспонента это 'e' или 'E' с последующими одной или более цифрами.
$foo = 1 + "10.5"; // $foo это float (11.5)
$foo = 1 + "-1.3e3"; // $foo это float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo это integer (1)
$foo = 1 + "bob3"; // $foo это integer (1)
$foo = 1 + "10 Small Pigs"; // $foo это integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo это float (14.2)
$foo = "10.0 pigs " + 1; // $foo это float (11)
$foo = "10.0 pigs " + 1.0; // $foo это float (11)
|
Дополнительно об этой конвертации см. учебник Unix, страницы о strtod(3).
Если вы хотите протестировать любой из примеров этого раздела,
вы может скопировать его и вставить следующую строку, чтобы посмотреть, что будет:
echo "\$foo==$foo; type is " . gettype ($foo) . "<br />\n";
|
|
|