Пятница , 29 Март 2024
ДомойПубликацииphp: вопросы и ответы, часть 1

php: вопросы и ответы, часть 1

php

не каждую тему нужно раскрывать в максимальной степени подробно, особенно, если для этого в php есть готовая фукнция. как правило, методом «научного тыка» пользуются новички либо люди, пришедшие в php с какого-то другого языка программирования. далее идёт небольшая часть мини-вопросов, оформленная в виде faq`a.

как преобразовать строку в число?

в php отсутствует строгая типизация. и в этом, конечно, его сила. но иногда требуется явное задание типа числа, например, при получении из формы каких-то значений (изначально они все строкового типа). для приведения строки к нужному типу можно воспользоваться следующими конструкциями:

$s1 = '123'; // строка, содержащая целое число
$s2 = '123.45'; // строка, содержащая вещественное число
$i = (int) $s1; // или так: $i = intval($s1);
$f = (float) $s2; // или так: $f = floatval($s2);

преобразование производится слева направо, до первого некорректного символа. т. е. любая строка может будет переведена в число ().

как произвести сцепку (конкатенацию) строк?

здесь проблемы могут возникнуть в основном у тех, кто ранее программировал, допустим, на javascript, в котором склейка производится с помощью знака +. с одной стороны это удобно, всё-таки унификация, но с другой, выполнив код:

var a = '1', b = '2', i = a + b;

получим 12, а не ожидаемые 3 (т. е. для данного случая требуется явное приведение типов для чисел a и b к целому). в php для конкатенации используется знак точка «.»:

$a = '1'; $b = '2';
$i = $a + $b; // результат 3 (целое)
$s = $a . $b; // результат 12 (строка)

каким образом формировать запросы в бд?

строка запроса — обычный текст, и должна оформляться как корректная текстовая строка; она должна быть: заключена в кавычки (одинарные или двойные), аналогичные кавычки внутри строки должны быть экранированы, т. е. предварены символом обратный слэш \

$sql = "SELECT * FROM `table` WHERE `txt` = '$str' AND 'don\'t'";
$r = mysql_query($sql);

каким образом использовать регулярные выражения?

в отличие от perl или javascript регулярные выражения в php не являются классами/объектами языка и не имеют специального синтаксиса (в javascript, например, делается так: /^[0-9]+$/, в php это недопустимо и выражение необходимо заключить в кавычки). для написания регулярки требуется создать обычное строковое выражение в соответствии с правилами написания данных выражений. простейшая проверка на строку, состоящую только из латинских букв и цифр (допустим, логин пользователя, длинной от 3 до 12 символов) будет иметь такой вид (здесь $str — произвольная строка):

$preg = '/^[a-z0-9]{3,12}$/i';
if (preg_match($preg, $str)) { /* код если логин корректный */ }

как работать с utf-8

php не поддерживает работу со строка в данной кодировке (это обещается только с версии 6). но это не значит, что сайты в utf-8 делать нельзя. наоборот, можно, и даже нужно! и для этого предоставляются достаточно мощные и удобные инструменты: библиотеки iconv и mbstring, и регулярные выражения, записанные со специальным модификатором. после этого нужно настроить любимый текстовой редактор так, чтобы он сохранял скрипты в кодировке utf-8 (без сигнатуры BOM, это очень важно!). после этого можно спокойно работать со строками почти также, как привыкли (будут отличаться названия функций, но это не страшно). для библиотечных функций, в принципе, всё понятно (часть их дублирует соответствующие функции из php, предваряя превычное название префиксом iconv_ или mb_). а вот как, с помощью регулярного выражения, можно проверить корректность имени города (модификатор u подсказывает движку регулярных выражений, что строка в utf-8. в названии города могут содержаться цифры, буквы, пробел и знак -):

$preg = '/^[а-яё0-9 -]+$/iu';
if (preg_match($preg, $city)) { /* код если логин корректный */ }
Рейтинг: 0

Автор публикации

2 070
не в сети 11 месяцев

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять