- •Тема 1 Основы cgi-программирования
- •1.1 Методы передачи данных
- •1.2 Передача документа пользователю
- •1.3 Передача информации cgi-сценарию
- •Тема 2 Характеристика языка php
- •2.1 Принцип работы php
- •2.2 Переменные, константы, выражения
- •Тема 3 Работа с данными формы
- •3.1 Передача данных
- •3.2 Трансляция полей формы в переменные
- •Тема 4 Конструкции языка
- •4.1 Условные инструкции
- •4.2 Инструкции циклов
- •4.3 Инструкции включения
- •Тема 5 Ассоциативные массивы
- •5.1 Списки и ассоциативные массивы
- •5.2 Операции над массивами
- •5.3 Списки и строки
- •5.4 Сериализация
- •Тема 6 Работа с массивами
- •6.1 Сортировка массивов
- •6.2 Функции для работы с массивами
- •Тема 7 Функции и области видимости
- •7.1 Формат определения функции, передача параметров
- •7.2 Глобальные, локальные, статические переменные
- •7.3 Рекурсия, вложенные и условно-определяемые функции
- •7.4 Передача функций по ссылке и возврат функцией ссылки
- •Тема 8 Строковые функции
- •8.1 Функции работы со строками
- •8.2 Работа с блоками текста
- •Тема 9 Математические функции
- •9.1 Встроенные константы
- •9.2 Встроенные функции
- •Тема 10 Работа с файлами и каталогами,
- •10.1 Функции работы с файлами
- •10.2 Блокирование файла
- •10.3 Функции работы с каталогами
- •10.4 Запуск внешних программ
- •Тема 11 Работа с датами и временем,
- •11.1 Представление времени в формате timestamp
- •11.2 Работа с датами, григорианский календарь
- •11.3 Посылка писем через php
- •Тема 12 Работа с www
- •12.1 Установка заголовков ответа
- •12.2 Работа с Cookies
- •Тема 13 Управление интерпретатором
- •13.1 Управление интерпретатором
- •13.2 Управление сессиями
- •Тема 14 Работа с базой данных mysql
- •14.1 Соединение с базой данных
- •14.2 Выполнение запросов к базе данных
- •Тема 15 Загрузка файлов на сервер
- •15.1 Multipart-формы, тег выбора файла
- •15.2 Поддержка закачки в php
- •Учебное издание
- •Разработка программного обеспечения на платформе net: php.Net
- •246019 Г. Гомель, ул. Советская, 104
2.2 Переменные, константы, выражения
Переменные. Имена переменных должны начинаться со знака $ и состоят из латинских букв и цифр. Имена переменных чувствительны к регистру ($my_variable, $My_variable). В РНР не нужно ни описывать переменные явно, ни указывать их тип. Интерпретатор делает это сам. Однако иногда он может ошибиться (например, если в текстовой строке на самом деле задано десятичное число), поэтому изредка возникает необходимость явно указывать тип переменной.
Переменные РНР это объекты, которые могут содержать в буквальном смысле все, что угодно (исключение – константа, которая может содержать только строку или число). Такого понятия как указатель в РНР не существует. При присваивании переменная копируется один-в-один, какую бы сложную структуру она не имела.
В программе не могут использоваться неинициализированные переменные!
Типы переменных. РНР непосредственно поддерживает 5 типов переменных:
integer – целое число со знаком, обычно длиной 32 бита (от -2 147 483 648 до 2 147 483 647);
double – вещественное число довольно большой точности;
string – строка любой длины;
array – ассоциативный массив (или его часто называют хэш). Это набор из нескольких элементов, каждый их которых представляет собой пару вида ключ=>значение (символом => обозначается соответствие определенному ключу какого-то значения). Доступ к отдельным элементам осуществляется указанием их ключа. В отличие от массивов Си ключами могут служить не только целые числа, начиная с нуля, но и любые строки. Оператор array() создает массив, элементы которого перечислены в скобках.
// создаст массив с ключами ”0”, ”a”, ”b”, ”c”
$a=array(0=>”zzzz”, ”a”=>”aaa”,
”b”=>”bbb”, ”c”=>”ccc”);
echo $a[”b”]; // выведет ”bbb”
$a[”1”]=”qq”; //создаст новый элемент в массиве
// и присвоит ему “qq”
$a[”a”]=”new_aaa”; // присвоит существующему элементу
// ”new_aaa”
object – объект, реализующий несколько наиболее простых принципов объектно-ориентированного программирования. Внутренняя структура объекта похожа на хэш, за искючением того, что для доступа к отдельным элементам и функциям используется оператор ->, а не квадратные скобки.
Логические переменные. Логическая переменная может содержать одно из двух значений: false или true. Кроме того, любое ненулевое число (и непустая строка) символизирует истину, тогда как 0, пустая строка – ложь.
echo false; // выводит пустую строку
echo true; // выводит 1
Действия с переменными. Вне зависимости от типа переменной, с ней можно делать три основных действия.
Присвоение значения (оператор =).
Проверка существования. Можно проверить существует ли (то есть, инициализирована ли) указанная переменная. Осуществляется это с помощью оператора IsSet(). Если такая переменная существует, функция возвращает значение истина, в противном случае – ложно.
if(IsSet($MyVar))
echo ”Такая переменая есть. Её значение $MyVar”;
Уничтожение. Уничтожение переменной реализуется оператором Unset(). После этого Действия переменная удаляется из внутренних таблиц интерпретатора, т.е. программы начинает выполняться так, как будто переменная еще не была инициализирована.
$a=”Hello”;
echo $a;
Unset($a); // теперь переменной а не существует
echo $a; // Ошибка: нет такой переменной
Применение Unset() для работы с обычными переменными нецелесообразно. Она используется для удаления элементов в ассоциативном массиве. Например, если в массиве $A нужно удалить элемент с ключом for_del:
Unset($A[”for_del”]);
Стандартные функции определения типа переменной:
is_integer($a) //возвращает true, если $a – целое число
is_double($a) //возвращает true,
//если $a – действительное число
is_string($a) //возвращает true, если $a – строка
is_array($a) //возвращает true, если $a – массив
is_object($a) //возвращает true, если $a – объект
is_boolean($a) //возвращает true,
// если $a – логическая переменная
is_gettype($a) //возвращает строки со значениями array, object,
//integer, double, string, boolean или unknown type
//в зависимости от типа переменной. Последнее
//значение возвращается для тех переменных,
//типы которых не являются встроенными в РНР.
Установка типа переменной
Функция settype(переменная,тип) пытается привести тип указанной переменной к одному из стандартных типов и возвращает значение false, если это не удалось.
settype($a,”integer”);
Оператор присваивания
$имя_переменной=значение;
В конце каждого оператора должна стоять ;
Cсылочные переменные. Хотя в РНР нет такого понятия как указатель, все же можно создавать ссылки на другие переменные. Существует две разновидности ссылок: жесткие и символические.
Жесткая ссылка представляет собой просто переменную, которая является синонимом другой переменной. Многоуровневые ссылки (то есть ссылка на ссылку) не поддерживаются. Жесткие ссылки создаются с помощью оператора &.
$a=10;
$b=&$a; // теперь $b то же самое, что и $a
Жесткая ссылка и переменная (объект), на которую она ссылается, совершенно равноправны, изменение одной влечет изменение другой. Оператор Unset() выполненный для жесткой ссылки, не удаляет объект, на которую она ссылается, а всего лишь разрывает связь между ссылкой и объектом. Объект удаляется только тогда, когда на него никто уже не ссылается. Жесткие ссылки применяются при передаче параметров функции и возврате значения из нее.
Символическая ссылка – строковая переменная, хранящая имя другой переменной. Чтобы добраться до значения переменной, на которую ссылается символическая ссылка, необходимо применить оператор разыменования – дополнительный знак $ перед именем ссылки.
$a=10;
$p=”a”; // присваиваем $p имя другой перемнной
echo $$p;//выводим переменную, на которую ссылается $p, т.е. $a
$$p=100; // присваивает $a значение 100
Итак, для того, чтобы использовать обычную строковую переменную как ссылку, нужно перед ней поставить еще один знак $. Это говорит интерпретатору, что надо взять не значение самой $p, а значение переменной, имя которой хранится в переменной $p.
Использование символических ссылок лучший способ запутать программу, поэтому старайтесь их избегать!
Константы. Константа отличается от переменной тем, что ей нигде в программе нельзя присвоить значение более одного раза, и её имя не предваряется знаком $, как это делается для переменных. Константы бывают 2 типов: предопределенные (установленные самим интерпретатором) и определенные программистом.
Предопределенные константы:
_FILE_ – хранит имя файла программы, которая выполняется в данный момент
_LINE_ – содержит текущий номер строки, которую обрабатывает в текущий момент интерпретатор
PHP_VERSION – версия интерпретатора РНР
PHP_OS – имя операционной системы, под которой работает РНР
TRUE или true – истина
FALSE или false – ложно
Определенные пользователем константы задаются при помощи оператора define()
define(”pi”,3.14);
define (”str”,”Hello”);
echo sin(pi/4);
echo str;
Функция defined(имя константы) проверяет, существует ли константа с указанным именем и возвращает значение false, если такой константы нет.
Выражения
Числовые выражения
$a=5; // a=5
$a=($b=10); // $a=$b=10
$a=4*sin($b=$c+10)+$d; // $b=$c+10
// $a=4*sin($c+10)+$d
Следующие операторы преобразования типов используются как в функциональной, так и в префиксной операторной форме, т.е. следующие конструкции эквивалентны:
$a=intval($b);
$a=(int)$b;
Операторы преобразования типов:
$b=intval(выражение) или $b=(int) (выражение)
// переводит выражение в целое число
$b=doubleval(выражение) или $b=(double) (выражение)
// переводит выражение в действительное число
$b=strval(выражение) или $b=(string) (выражение)
// переводит выражение в строку
$b=(bool) (выражение)
// переводит выражение в логический тип.
Логические выражения. Логические операторы: <, > , == (равно), || (или), ! (не), && (и). Переменным можно присваивать значения логических выражений:
$a=10<5; // a=false
$a=$b==1; // $a=true, если $b=1
$a=$b>1&&$b<=10 // $a=true, если $b в пределах от1 до 10
$a=!($b||$c)&&$d; //$a=true, если $b и $c ложны, а $d – истинно
$b=$a>=1&&a<=10; //присваиваем $b значение логического
// выражения
if ($b) echo ”a в нужно диапазоне значений”;
Cтроковые выражения. Строки могут содержать текст вместе с символами форматирования. Определение строки в кавычках или апострофах может начинаться на одной строке, а завершаться на другой.
Строка, заключенная в апострофы трактуется так же, как записана, за исключением двух последовательностей символов:
\’ трактуется как апостроф, предназначенный для вставки апострофа в строку, заключенную в апострофы;
\\ трактуется как обратный слэш и позволяет вставить в строку этот символ.
Строки в кавычках могут содержать набор специальных метасимволов:
\n – символ новой строки;
\r – символ возврата каретки;
\t – символ табуляции;
\$ – обозначает символ $, чтобы следующий за ним текст не был интерпретирован как переменная;
\” – кавычка;
\\ – обратный слэш;
\xNN символ с шестнадцатеричным кодом NN.
Для слияния строк используется операция конкатенации “.”. Операторы, выводящие текстовые строки.
echo ”Текущая дата: $dat года <br>\n”;
echo ”Текущая дата:”,$dat,” года <br>\n”;
echo ”Текущая дата:”.$dat.” года <br>\n”;
Плюс используется как числовой оператор, а точка – как строковый:
$a=”100”;
$b=”200”;
echo $a+$b; // выведет “300”
echo $a.$b; // выведет “100200”
Here–документ. Это способ записи строковых констант, который представляет собой альтернативу для записи многострочных констант.
$a=<<<MARKER
Далее идет какой-то текст, возможно,
с переменными $name значения которых будут
вставлены в документ
MARKER;
Строка MARKER может быть любым алфавитно-цифровым идентификатором. Синтаксис накладывает 2 ограничения на here-документы:
1) после <<<MARKER и до конца строки не должны идти никакие непробельные символы;
2) завершающая строка MARKER; должна оканчиваться точкой с запятой, после которой до конца строки не должно быть никаких инструкций. MARKER – это любой идентификатор.
Вызов внешней программы. Строка в обратных апострофах заставляет РНР выполнить команду операционной системы и то, что она вывела, подставить на место строки в обратных апострофах. Например, содержимое текущего каталога можно узнать так:
$st='command.com/c dir';
echo ”<pre>$st</pre>”;
Операции:
Арифметические: +, -, *, /, a%b (остаток от делении а на b, работает только с целыми числами), $a+=4; $b-=3;
Строковые: a.b – слияние строк; a[n] – символ строки в позиции n.
Присваивания (=).
Инкремента и декремента ($a++, $a--, --$a, ++$a).
Битовые операции. Предназначены для работы (установки/снятия/проверки) групп битов целой переменной. Биты целого числа – это отдельные разряды того же самого числа, записанного в двоичной системе счисления: a&b, a|b, `a, a<<b (сдвиг влево), a>>b (сдвиг вправо).
Операции сравнения: a==b, a!=b, a<b, a>b, a<=b, a>=b.
Операции эквивалентности: это тройной знак равенства = = =, или оператор проверки на эквивалентность. Это оператор не только сравнивает выражения, но и их типы. Есть антипод этого оператора (!= =) – не эквивалентны.
Логические операции. !a, a&&b, a||b
Оператор отключения предупреждений. В РНР-программах все ошибки выводятся в окно браузера вместе с указанием строки и файла, в которых они находятся. РНР ранжирует ошибки и предупреждения по четырем основным «уровням серьезности». Можно настроить PHP так, чтобы он выдавал только ошибки тех уровней, которые необходимы. Для отключения выдачи ошибок в окно браузера, существует оператор @(отключение ошибок). Если разместить этот оператор перед любым выражением, то сообщения об ошибках в этом выражении будут подавлены и в окне броузера не отображены.
<? if (@$doGo) echo ”Вы нажали кнопку!”; ?>
Виды комментариев:
операторы // комментарий
# однострочный комментарий
/*
многострочные комментарии (ими лучше не пользоваться! так как они вступают в конфликт с русскими буквами)
*/
Замечания
1 Для вывода значений переменных, переданных из форм, нужно использовать оператор print и указывать метод передачи данных: print ”Ваше имя:”.$_GET[’name’];
print ”Ваше имя:”.$_POST[’name’];
2 Условные обозначения при использовании стандартных функций PHP:
string – обычная строка, или тип, который можно перевести в строку;
int, long – целое число, либо вещественное число (в последнем случае дробная часть отсекается), либо строка, содержащая число в одном из перечисленных форматов. Если строку не удается перевести в int, то вместо нее подставляется 0, и никаких предупреждений не генерируется!
double, float – вещественное число, или целое число, или строка, содержащая одно из таких чисел.;
bool – логический тип, который будет восприниматься либо как ложь (нулевое число, пустая строка или константа false), либо как истина (все остальное);
array – ассоциативный массив;
list – массив с целыми ключами, пронумерованными от 0 и следующими подряд. Так как список является разновидностью ассоциативного массива, то обычно вместо параметров функций типа list можно подставлять и параметры типа array;
object – объект какой-то структуры;
void – применяется только для определения возвращаемого функцией значения (не возвращает ничего);
mixed – все, что угодно. Это может быть целое или дробное число, строка, массив или объект.
