РНР 5 в подлинникеСтраница 153 из 554 |
|
|
ГЛАВА 1 5 ![]() Строковые функции Листинги данной главы можно найти в подкаталоге string. Строки в РНР — одни из самых универсальных объектов. Как мы уже видели, любой, сколь угодно сложный объект можно упаковать в строку при помощи функции serialize;) (и обратно через unserialize о). Строка может содержать абсолютно любые символы с кодами от 0 до 255 включительно. Нет никакого специального маркера "конца строки", как это сделано в языке С (там конец строки помечается символом с нулевым кодом). А значит, длина строки во внутреннем представлении РНР хранится где-то отдельно. Для формирования и вставки непечатаемого символа в строку (например, с кодом 1 или 15) используется функция спг(), которую мы рассмотрим в разд. "Работа с одиночными символами". Наконец, из-за слабого контроля типов в РНР строка может содержать (и часто содержит) число, причем с ней можно работать, как с числом: прибавлять другие числа, умножать и т. д. При этом все преобразования (в десятичной системе) производятся автоматически. Существуют также функции, преобразующие число, записанное в различных системах счисления (например, в восьмеричной), в обычное представление, и наоборот. Их мы обсудим позже, в следующей главе. В этой главе мы описываем только самые употребительные и удобные функции (около 80%), пропуская все остальные. Какие-то из не вошедших в данную главу функций (например, quotemeta ()) мы будем рассматривать в других главах. Так что, не найдя описание интересующей вас функции здесь, подумайте: возможно, оно лучше подходит для другой темы и его лучше поискать там? И наконец, последней инстанцией для вас, конечно же, должна являться документация РНР. Самая, пожалуй, распространенная операция со строками — это их конкатенация, или присоединение к одной строке другой. В ранних версиях РНР для этого, как и для сложения чисел, использовался оператор +, что постоянно приводило к путанице: если к числу прибавляется строка, что должно получиться — число или строка? Если число, то вдруг наша строка содержала на самом деле не число, а какой-то ![]() Конкатенация строк 312 Часть IV. Стандартные функции РНР текст? В третьей и последующих версиях интерпретатора разработчики отказались от этого механизма и объявили, что + следует применять только для сложения чисел, и никак иначе. Что же касается конкатенации строк, то для нее ввели специальный оператор "." (точка). Оператор "." всегда воспринимает свои операнды как строки и возвращает строку. Если один из операндов не может быть переведен в строковое представление, т. е. если это массив или объект, то он воспринимается как строки array и object соответственно. Вообще говоря, это правило применимо и не только при сцеплении строк, но и при передаче такого операнда в какую-нибудь стандартную функцию, которой требуется строка. Например, следующие команды выведут слово Array: $а = array(10, 20, 30); echo $а // Внимание! Неожиданный результат! Есть и другой, более специализированный, способ конкатенации строк. Он обычно используется, когда значения строковых или числовых переменных перемежаются с обычными словами. Если, к примеру, мы в программе работаем с датой и временем, ПреДСТавлеННЫМИ СОВОКУПНОСТЬЮ Переменных ($day, $month, $year, $hour, $min, $sec), то вывести строку вида "Все началось 19 февраля 1998 года, в 13:24:18" можно так: echo "Все началось $day $month $уеаг года, в $hour:$min:$sec"; При этом в строку, вырабатываемую инструкцией echo, автоматически в нужных местах вставятся значения наших переменных. Это позволяет констатировать тот факт, что в РНР все переменные начинаются с $. string str_repeat(string $st, string $number) Функция "повторяет" строку $st Snumber раз и возвращает объединенный результат. Вот пример: echo str_repeat("test!",3); // выводит test!test!test! О сравнении строк Теперь мы хотели бы рассмотреть одно тонкое место в интерпретаторе РНР, касающееся работы со строками. (Собственно, мы уже затрагивали эту тему, когда говорили об операторах сравнения.) Если мы используем операторы сравнения == и ! = (или любые другие, которые могут потребовать перевода строки в число) с операндами-строками, то результат, вопреки ожиданиям, не всегда оказывается верным. Чаще всего это проявляется как раз в инструкции if. Примеры приведены в листинге 15.1. I Листинг 15.1. Файл compare.php <?php ## Особенности операторов сравнения применительно к строкам. $опе =1; // Число один. $zero = 0; // Присваиваем число нуль. if ($опе == "") echo 1; // Очевидно, не равно — не выводит 1. |
|
|
В начало ←предыдущая следующая→ ... 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 ... | |