The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "PHP" / Оглавление документа
Учебник РНР
Назад Глава 6. Типы Вперёд

Строки

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

Другой способ ограничения строки - использовать синтаксис 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";

Назад Оглавление Вперёд
Числа с плавающей точкой Вверх Массивы



Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру