Тема 2. Язык PHP - Международный банковский институт

advertisement
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Тема 2. Язык PHP
Цель: познакомиться с синтаксисом языка и основными операторами.
Задачи: в ходе изучения данной темы студенты должны освоить
принципы работы с основными операторами языка:
 операторами присваивания, простыми и составными;
 инкрементными операторами;
 операторами управления: условным оператором, операторами цикла,
оператором выбора;
 изучить базовые системные функции определения и преобразования
типов переменных;
 познакомиться с функциями isset () и empty ().
Оглавление
2.1. Язык PHP — история возникновения ................................................................ 1
2.2. Особенности реализации: принципы компиляции и интерпретации,
используемые при трансляции языка ..................................................................... 3
2.3. Особенности синтаксиса языка PHP ................................................................. 6
2.4. Базовые операторы ........................................................................................ 10
2.5. Операторы управления .................................................................................. 15
2.5.1. Условный оператор IF ............................................................................. 15
2.5.2. Тернарный оператор ............................................................................... 17
2.5.3. Цикл WHILE ............................................................................................. 17
2.5.4. Цикл DO..WHILE (цикл с постусловием) ................................................. 18
2.5.5. Цикл FOR ................................................................................................. 19
2.5.6. Цикл foreach ............................................................................................ 21
2.5.7. Оператор CONTINUE ................................................................................ 23
2.5.8. Оператор переключения или выбора SWITCH ........................................ 23
2.6. Функции ......................................................................................................... 25
2.6.1. Определение функций ............................................................................ 25
2.6.2. Аргументы функции ................................................................................ 27
2.7. Ассоциативные массивы ................................................................................ 28
2.7.1. Инициализация массивов ....................................................................... 28
2.7.2. Функции по работе с массивами ............................................................. 29
2.7.3. Использование курсора при работе с массивами ................................... 32
2.8. Функции обработки строк .............................................................................. 33
Выводы ................................................................................................................. 35
Вопросы для самопроверки.................................................................................. 35
2.1. Язык PHP — история возникновения
Язык PHP был разработан как инструмент для решения чисто практических задач.
Его создатель, Расмус Лердорф, хотел знать, сколько людей читают его onlineрезюме, и написал для этого простенькую CGI-оболочку на языке Perl, т. е. это был
набор Perl-скриптов, предназначенных исключительно для определенной цели —
сбора статистики посещений. Вскоре выяснилось, что оболочка обладает
небольшой производительностью, и пришлось переписать ее заново, но уже
на языке Си. После этого исходники были выложены на всеобщее обозрение для
исправления ошибок и дополнения. Пользователи сервера, где располагался сайт
с первой версией PHP, заинтересовались инструментом, появились желающие его
1
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
использовать. Так что скоро PHP превратился в самостоятельный проект,
и в начале 1995 г. вышла первая известная версия продукта, называвшаяся
Personal Home Page Tools (средства для персональной домашней страницы).
К середине 1995 г. после основательной переработки появилась вторая версия
продукта, названная PHP/FI (Personal Home Page / Forms Interpreter —
персональная домашняя страница/ интерпретатор форм). Она включала набор
базовых
возможностей
сегодняшнего
PHP,
возможность
автоматически
обрабатывать HTML-формы и встраиваться в HTML-коды. Синтаксис PHP/FI сильно
напоминал синтаксис Perl, но был более простым.
В 1997 г. вышла вторая версия Cи-реализации PHP — PHP/FI 2.0. К тому моменту
PHP использовали уже несколько тысяч людей по всему миру, примерно с 50 тыс.
доменов, что составляло около 1 % всего числа доменов Internet. Число
разработчиков PHP увеличилось до нескольких человек, но, несмотря на это,
PHP/FI 2.0 все еще оставался крупным проектом одного человека. Официально
PHP/FI 2.0 вышел только в ноябре 1997 г., просуществовав до этого в основном
в бета-версиях. Вскоре после выхода его заменила альфа-версия PHP 3.0.
PHP 3.0 была первой версией, напоминающей PHP, каким мы знаем его сегодня.
Его создатели, Энди Гутманс (Andi Gutmans) и Зив Сураски (Zeev Suraski),
в 1997 г. переписали заново код PHP/FI, поскольку он показался им непригодным
для разработки приложения электронной коммерции, над которым они работали.
Для того чтобы получить помощь в реализации проекта от разработчиков PHP/FI,
Гутманс и Сураски решили объединиться с ними и объявить PHP 3.0 официальным
преемником PHP/FI. После объединения разработка PHP/FI была полностью
прекращена.
Одной из сильных сторон PHP 3.0 была возможность расширения ядра. Именно
свойство расширяемости PHP 3.0 привлекло внимание множества разработчиков,
желающих добавить свой модуль расширения. Кроме того, PHP 3.0 предоставляла
широкие возможности для взаимодействия с базами данных, различными
протоколами и API. Немаловажным шагом к успеху оказалась разработка нового,
намного более мощного и полного синтаксиса с поддержкой ООП. С момента
появления PHP 3.0
изменилась не только функциональность и внутреннее
устройство языка, но и его название. В аббревиатуре PHP больше не было
упоминания о персональном использовании, PHP стало сокращением (рекурсивным
акронимом) от PHP: Hypertext Preprocessor, что значит «PHP: препроцессор
гипертекста».
К концу 1998 г. число пользователей PHP возросло до десятков тысяч. Сотни
тысяч Web-сайтов сообщали о том, что они работают с использованием этого
языка. Почти на 10 % серверов Internet был установлен PHP 3.0.
Официально PHP 3.0 вышел в июне 1998 г., после 9 месяцев публичного
тестирования. А уже к зиме Энди Гутманс и Зив Сураски начали переработку ядра
PHP. В их задачи входило увеличение производительности работы сложных
приложений и улучшение модульности кода, лежащего в основе PHP.
Новое ядро было названо «Zend Engine» (от имен создателей: Zeev и Andi)
и впервые представлено в середине 1999 г. PHP 4.0, основанный на этом ядре
и принесший с собой набор дополнительных функций, официально вышел в мае
2000 г., почти через два года после своего предшественника, PHP 3.0. Помимо
улучшения производительности, PHP 4.0
имел еще несколько ключевых
нововведений, таких как поддержка сессий, буферизация вывода, более
безопасные способы обработки вводимой пользователем информации и несколько
новых языковых конструкций.
2
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
В настоящее время ведутся работы по улучшению Zend Engine и внедрению
нововведений в PHP 5.0, первые бета-версии которого уже вышли в свет. Одно
из существенных изменений произошло в объектной модели языка, она
значительно расширена.
Сегодня PHP используется сотнями тысяч разработчиков. Несколько миллионов
сайтов написаны на PHP, что составляет более 20 % доменов Internet.
2.2. Особенности реализации: принципы
компиляции и интерпретации, используемые при
трансляции языка
В PHP сочетаются две самые популярные парадигмы программирования —
объектная и процедурная. В PHP4 более полно поддерживается процедурное
программирование, но есть возможность писать программы и в объектном стиле.
В PHP5 большинство недочетов в реализации объектно-ориентированной модели
языка, существующих в PHP4, устранены. Таким образом, можно выбрать наиболее
привычный стиль работы. Первоначально PHP строился как интерпретируемый
язык, т. к. каждая команда языка сначала переводилась в машинные коды, а затем
сразу исполнялась, и только потом транслятор переходил к следующей команде.
Такое построение транслятора обеспечивало его уникальную возможность
встраиваться внутрь HTML-страниц. Большинство языков программирования имеют
трансляторы, которые работают по принципу компиляции: сначала проводится
анализ всего текста программы, а потом строится его машинный исполняемый код.
Использование компиляторов позволяет построить оптимальный машинный код,
наилучшим образом использовать ресурсы компьютера. Однако такое решение
всегда имеет два этапа трансляции: сначала полный синтаксический
и семантический анализ, а потом построение исполняемого кода. При работе
с Интернет это может вызвать серьезную задержку по времени, что недопустимо.
Использование режима интерпретации так же имеет ряд недостатков: прежде
всего повторная генерация кода при выполнении циклических операций,
неоптимальное распределение памяти и др. Однако трансляция и исполнение
одной команды в режиме интерпретации существенно быстрее, чем компиляция
всего большого текста.
В настоящий момент транслятор с PHP построен по блочно-интерпретируемому
типу, т. е. происходит трансляция не покомандная, а блочная, циклы реализуются
как блоки, без повторной трансляции, но все-таки код не генерируется полностью,
что соответствует допустимой скорости реакции для клиентов.
PHP-транслятор является препроцессором к HTML, т. е. его работа построена
по следующей схеме: сначала файл поступает на обработку транслятору PHP,
а потом полученный в результате его работы файл, посылается Web-сервером
Web-клиенту — браузеру на компьютере клиента, который и выводит его
пользователю (см. рис. 2.1).
3
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 2.1. Процесс обработки файлов с расширением .php3
Для того чтобы Web-сервер некоторый файл отдал на обработку препроцессору
PHP, а не сразу послал на браузер клиента, у этого файла должно быть
специальное расширение. В общем случае это вещь настраиваемая, но чаще всего
расширением бывает PHP или PHP3.
Файл с данным расширением может содержать код для препроцессора,
но в общем это не обязательно, если он не содержит кода для препроцессора, тот
просто его просмотрит и ничего не изменит, однако это займет время. Поэтому,
если некоторые страницы HTML не содержат кода PHP, то не следует таким файлам
давать расширение PHP3, их оставить с расширением HTML или HTM.
Если файл содержит PHP-код, то препроцессор его выполняет на сервере
и на выходе появляется страница HTML, которая может серьезно отличаться от той
исходной, в которую был вставлен PHP-код.
Обычные HTML-страницы
обработки.
сервер
отправляет
клиенту
без
предварительной
Основное отличие PHP от CGI-скриптов, написанных на языках Perl, C,C++, в том,
что в последних HTML-код должен быть полностью сформирован в программе, а код
PHP — встраивается в готовую HTML-страницу, при этом встраивается только в тех
местах, в которых это необходимо, а остальной текст остается на стандартном
HTML-языке. PHP-код встраивается, используя специальный тег, который может
быть сформирован 3 способами:
<?php
PHP?>
текст
на
здесь <?php — открывающий тег
?> — закрывающий тег. Внутри этих тегов PHP-код
<? echo("простейший способ, инструкция обработки SGML\n");?>
<script language="php"> echo ("некоторые редакторы (подобные FrontPage) не
любят обрабатывающие инструкции"); </script>.
По умолчанию поддерживается механизм <?php ...?>. Для включения коротких
тегов <??> требуется указать это в специальной установке файла php.ini
параметра — поддержка коротких открывающих тэгов:
short_open_tag
ON
4
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
PHP называется языком серверных скриптов в отличие от языков клиентских
скриптов JavaScript и Vbscript. Код на JavaScript и Vbscript исполняется на клиенте,
браузер умеет его находить и исполнять.
Кроме PHP существуют и другие языки серверных скриптов: ASP (active server
page) Java Server Pages (JSP) средства ColdFusion (www.allaire.com), embPerl.
Пример простейшей PHP-программы:
<html>
<head>
<title>Exampl 1 PHP </title>
</head>
<body>
<?php echo " Привет, это (PHP-) программа
!";?>
</body>
</html>
На клиенте, если
следующий текст:
мы посмотрим
источник
текста
HTML-кода
мы получим
<html>
<head>
<title>Example
</title>
1
PHP
</head>
<body>
Привет,
программа !
это
(PHP-)
</body>
</html>
Теги РНР могут вставляться внутрь HTML-тегов.
В
следующем
примере
продемонстрировано
включение
динамической
информации в Web-страницу на примере вывода текущей даты в заголовке окна
(рис. 2.2).
<title> Рецепты
Y"));?></title>
PHP
|
<?
print
(date("F
d,
Простая функция РНР date() форматирует дату одним из нескольких стандартных
способов. Отформатированная дата вставляется в заголовок окна.
5
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 2.2. Внедрение тегов PHP в заголовок окна
Возможно самая сильная и значимая возможность в PHP4 — уровень интеграции
с базами данных. В настоящее время поддерживаются практически все
современные системы управления базами данных (СУБД).
2.3. Особенности синтаксиса языка PHP
Инструкции (утверждения) разделяются так же, как в C или Perl, — точкой
с запятой. На одной строке может быть написано несколько команд.
Закрывающий тэг (?>) тоже подразумевает
следующие записи эквивалентны:
конец
утверждения,
поэтому
<?php
echo "Это тест";
?>
<?php
тест"?>
echo
"Это
Однострочный комментарий // все, что пишется после двойного слэша и до конца
строки считается комментарием.
Или # комментарий, как в UNIX
Многострочный комментарий
/* комментарий строка1
комментарий строка2
... комментарий строка n */
Одними из основных объектов языка являются переменные. Имена переменных
начинаются всегда с символа $ (доллар) и могут содержать латинские буквы,
арабские цифры и знаки подчеркивания. После знака $ должна стоять хотя бы
одна буква, а потом допустимые символы могут идти в любой последовательности.
Например: $my_perem, $m1,$m2 — правильные имена, а $1 m — неправильное
имя. В языке различают регистры в именах переменных, $ m 1 и $ M 1 — разные
переменные.
Строки могут быть ограничены двумя парами ограничителей: одинарными
кавычками и двойными кавычками. При ограничении одинарными кавычками
строка воспринимается «как есть», т. е. просто символьная строка. Единственными
заменами в данной строке являются замены экранированных специальных
6
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
символов — \\ (двойной слэш) переводится в одинарный слэш, \’ (слэш-одинарная
кавычка) — переводится в ’ (одинарную кавычку).
Использование двойных кавычек позволяет внутри строки интерпретировать
значение переменных, т. е. имя переменной заменяется ее значением.
$a= 25;
echo “ a = $a”; // выведет “a =
25”
Обратный слэш \ используется для подстановки специальных символов:
\n — переход на новую строку
\r — возврат к началу строки
\t — горизонтальная табуляция
\$ — знак доллара
\" — двойная кавычка.
PHP поддерживает переменные следующих стандартных типов:







integer — целое;
double — число с дробной частью;
string — строковая переменная;
array — массив;
object — объектная переменная;
pdfdoc — PDF-документ (только при наличии поддержки PDF);
pdfinfo — PDF-инфо (только при наличии поддержки PDF).
Тип переменной обычно не устанавливается программистом; вместо этого
он определяет PHP во время выполнения программы, в зависимости от контекста,
в котором данная переменная используется.
Так если встретилась операция:
$m1=
2;
то переменная $m1 получает тип interger.
Если вам нравится указывать тип переменной непосредственно, вы можете
использовать для этого специальную функцию settype(). Формат преобразования
settype
type).
(mixed
var,
string
Например:
$bar
=
переменная
true;
//
логическая
settype($bar, "string");
$c="4asd"; // символьная строка
settype($c, "integer");
7
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Учтите, что переменная может вести себя по-разному в определенных ситуациях,
в зависимости от того, какой тип определен для нее в данное время.
Для инициализации переменной в PHP вы просто присваиваете ей значение.
Для большинства переменных это именно так; для массивов и объектных
переменных, однако, может использоваться несколько иной механизм.
Существуют 2 функции, которые позволяют определить, была ли переменная
определена, и было ли ей присвоено конкретное значение. Первая Isset ($ a) если
переменная была определена, то выдает истину. Функция empty ($ a) — истина,
если переменная определена, но ей не задано значение. Если переменная
определена и имеет отличное от нуля значение, то empty () выдает «ложь». Можно
проверить на задание значения с использованием константы null.
IF ($ a == null) echo “ переменная “. ‘$ a '.”не
задана”;
В общем случае можно использовать операцию приведения типа к требуемому,
требуемый тип записывается в круглых скобках перед переменной, которая должна
быть приведена к данному типу.
$ a = 10; // $ a integer
$ b = (double)$ a; // $ b
double
Допускается следующее приведение типов:





(int), (integer) — приведение к целому;
(real), (double), (float) — приведение к типу double;
(string) — приведение к строке;
(array) — приведение к массиву;
(object) — приведение к объектной переменной.
Заметим, что табуляция и пробелы допускаются внутри круглых скобок, поэтому
следующие операции эквивалентны:
$foo = (int) $bar; $foo = (int)
$bar;
Когда строковая переменная оценивается как числовая, результирующее
значение и тип переменной определяются с использованием следующих правил.
 Переменная string будет оценена как double, если она содержит любой
из символов ’.’, ’e’, или ’E’. Иначе она будет оценена как integer.
 Если строка начинается с допустимых цифровых данных, то это значение
и будет использоваться. Иначе будет значение 0 (ноль).
цифровые данные — это конструкция из факультативного
символа, следующего за одной или несколькими цифрами. Факультативными
символами могут быть точка или знак экспоненты е или Е.
 Допустимые
$a = 1 + "10.5"; // $a тип double (11.5)
$a = 1 + "-1.3e3"; // $a тип double (-1299)
$a = 1 + "bob-1.3e3"; // $a тип integer (1)
$a = 1 + "bob3"; // $a тип integer (1)
8
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
$ a = 1 + "10 маленьких собачек"; // $ a тип integer
(11)
$a = 1 + "10 кошечек "; // $a тип integer (11);
Поскольку PHP определяет типы переменных и преобразует их (в общем) по мере
необходимости, не всегда очевидно, какой тип данная переменная имеет
в какой-то отдельный момент. Поэтому PHP включает несколько функций, которые
позволяют определить текущий тип переменной. Это функции gettype(), is_long(),
is_double(), is_string(), is_array(), и is_object().
Функция gettype () определяет тип переменной, она возвращает одно из
следующих выражений: “ interger ”, ” double ”, ” string ”, ” array ”, ” object ”,
“ class ”, ” unknown type ”.
Функция settype(<переменная>,<тип>) — принудительно устанавливает новый
тип переменной. Например:
$ m = 7.5; settype ($ m,” integer ”); // теперь переменная $ m будет
целочисленной и сохранит значение 7.
Функция unset(var) — уничтожает
память, занимаемую этой переменной.
переменную
и освобождает
оперативную
Функция isset (var) — позволяет определить, существует ли данная переменная.
Если существует, то функция возвращает TRUE — истину (1 — единицу),
в противном случае возвращается ложь FALSE (0 нуль).
IF (isset ($ m)) {
Echo (“
вывести”);
переменную”.'$
m
'.”
можно
}
IF (! isset ($ m)){
Echo
(“переменную”.'$
вывести”);
m
'.”нельзя
}
Функции Is_int(),is_integer(),is_double(),is_real(),is_float(),is_array(),
is _ object (), Is _ string () возвращают TRUE, если переменная относится
к данному типу, и FALSE в противном случае.
Функции intval _(), doubleval (), strval () — явным образом задают тип
данных. Например:
$ m =”123 tt ”;
$ i = intval ($ m); // переменная $ i получит значение
123.
9
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
2.4. Базовые операторы
Любой текст на языке PHP состоит из последовательности операторов. Оператор
может быть присваиванием, вызовом функции, циклом, условным выражением или
пустым выражением (ничего не делающим). Операторы обычно заканчиваются
точкой с запятой. Также операторы могут быть объединены в группу заключением
группы операторов в фигурные скобки. После закрывающей фигурной скобки
точка с запятой не ставится. Группа операторов образует составной оператор.
В операторах могут в качестве операндов использоваться переменные, константы,
функции и выражения.
PHP определяет несколько встроенных констант и предоставляет механизм для
определения пользовательских констант. Константы похожи на переменные, но они
имеют слегка измененный синтаксис.
Предопределенные константы — это __FILE__ and __LINE__, которые
соответствуют имени файла и номеру строки, которая выполняется в настоящий
момент.
Пример 1. Использование __FILE__ и __LINE__
<?php
function report_error($file, $line, $message) {
echo " Ошибка
$message.";
в
файле
$file
в
строке
$line:
}
report_error(__FILE__,__LINE__, " Произошел сбой
!");
?>
Вы можете определить дополнительные константы с помощью функций define()
и undefine().
Пример 2. Описание констант
<? php
define (" CONSTANT ", "Здравствуйте!");
echo CONSTANT; // Выведет "Здравствуйте"
undefine
константы
("CONSTANT");
//
Уничтожение
?>
Выражение описывает некоторое действие, выполняемое в программе. Каждое
выражение состоит, по крайней мере, из одного операнда и одного или нескольких
операторов. Операнд представляет собой некоторую величину, обрабатываемую
в программе. В качестве операндов могут выступать переменные, константы,
функции.
Простой оператор присваивания: знак равно =
10
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
$ a =100; // переменной $ a присвоили значение 100
$ m = “хорошо”; // переменной $ m присвоили значение строки
“хорошо”.
Можно выполнять и сложные вложенные операции присваивания:
$a = ($b = 4) + 5; // теперь $a равно 9, а $b стало равным
4.
В дополнение к основным операторам присваивания есть дополнительные
«комбинационные операторы» для всех арифметических и строковых операторов,
что позволяет использовать значение в выражении и затем устанавливать свое
значение в результате выполнения этого выражения. Например:
$a = 3; $a += 5;// это эквивалентно $a = $a + 5;
$b="Привествую ";$b.= "Вас!"; // что эквивалентно $b = $b.
"Вас!";
Инкрементные операции:
$ a ++ -постинкремент
++$ a прединкремент
$ a -- декрементирование
--$ a предшествующее декрементирование
Есть 2 типа инкремента и декремента — предварительный и последующий.
И предварительный, и последующий инкремент увеличивает значение переменной.
Они
отличаются
последовательностью
операций
инкрементирования
и присваивания. Если знаки инкрементирования или декрементирования стоят
перед переменной, то PHP сначала изменяет значение (увеличивает или уменьшает
в зависимости от знака), а потом возвращает значение. Если оператор стоит после
переменной, то сначала PHP возвращает значение переменной, а потом производит
изменение.
$b = $a = 5; // присваиваем значения переменным $a и $b
$c = $a++; // последующее увеличение, присваиваем $c начальное значение $a,
потом увеличиваем переменную $ a на единицу.
$e = $d = ++$b; // предварительное увеличение, присваиваем $d и $e
увеличенное значение $b, т.е.6
$f = 2*$d++; // присвоить удвоенное значение $d до его увеличения, то есть 2*6
= 12, переменной $f
$g = 2*(++$e); /* присвоить удвоенное значение $e после его увеличения, то
есть 2*7 = 14, переменной g
$h = $g += 10; /* сначала увеличить значение $g на 10, что даст в результате
24, а затем присвоить это значение переменной $h, что также даст 24
Задания для самостоятельной работы
11
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
1.
$ k =1; $ m =1; $ k =$ m ++; // Чему будут равны все переменные
2.
$ k =1; $ m =1; $ k =++$ m; // Чему будут равны все переменные
3.
$ k =1; $ m =1; $ k ++=$ m ++ // Чему будут равны все переменные
4.
$ k =1; $ m =1; $ k ++=++$ m // Чему будут равны все переменные
Арифметические операторы
Помните основную арифметику из школы? Эти операторы работают подобным
образом.
Таблица 2.1. Арифметические операторы
Пример
Название
Результат
$a + $b
Сложение
Сумма $a и $b.
$a - $b
Вычитание
Вычитает $b из $a.
$a * $b
Умножение
Произведение $a и $b.
$a / $b
Деление
Деление $a на $b.
$a % $b
Остаток деления
Остаток от деления $a на $b.
Оператор деления("/") возвращает целую величину (результат целочисленного
деления), если оба оператора — целые (или строка преобразованная в целое).
Если каждый операнд является величиной с плавающей запятой, выполнится
деление с плавающей запятой.
Операторы объединения строк
B действительности есть только один оператор над строками конкатенации (".").,
обозначаемый точкой и означающий объединение исходных строк.
$ a = "Здравствуй ";
$ b = $ a. "Мир!"; // теперь переменная $ b = "Здравствуй
Мир!"
Таблица 2.2. Сложные операторы присваивания
Пример
Название
Результат
$а = 5;
Присваивание
Переменная $а равна 5
$а += 5;
Сложение с присваиванием
Переменная $а равна сумме $а и 5
$а *= 5;
Умножение с присваиванием
Переменная $а равна произведению
$а и 5
$а/=5;
Деление с присваиванием
Переменная
$а
от деления $а на 5
$а.= 5;
Конкатенация с присваивание
м
Переменная $а равна конкатенации
$а и 5
равна
Бинарные операторы позволяют вам изменять биты в целых числах.
12
частному
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Таблица 2.3.Бинарные Операторы
Пример Название Результат
Будут установлены в 1 биты, которые были
Установлены в 1 и в $a и в $b. *Пример:
$a & $b
И
$a=5; /* 0101 */
$b=12; /* 1100 */
$c=$a & $b; /* $c будет равно 4 (0100) */
Будут установлены в 1 биты, установленные в $a
$a | $b
Или
или $b.
Пример:
$a=5; /* 0101 */ $b=12; /* 1100 */
$c=$a|$b; /* $c будет (1101) */
~ $a
Не
Будут установлены в 1 не_присутствующие в $a биты
(реверс)
$a=5; /* 0101 */ ~ $a /* $a будет равно x (1010) */
Логические операторы
Таблица 2.4. Логические операторы
Пример
$a and $b
Название Результат
И
Истина, если истинны $a и $b.
$a or $b
Или
Истина, если истинны $a или $b.
$a xor $b
Или
Истина, если истинны $a или $b, но не оба.
! $a
Не
Истина, если не истинно $a.
$a && $b
И
Истина, если истинны и $a и $b.
$a || $b
Или
Истина, если истинны $a или $b.
Разница в двух различных вариантах операторов "and" и "or" — в различии
приоритетов операций. Операторы && и || имеют более высокий приоритет, чем
операторы AND и OR.
Во многих случаях, в основном в условных операторах и операторах циклов,
вы не заинтересованы в точном знании конкретных значений выражений, а хотите
знать, являются ли их значения истинными TRUE или ложными FALSE. В PHP нет
логического типа boolean. Логические значения вычисляются примерно так же, как
я в языке Perl. Любое ненулевое целое значение — это TRUE, ноль — это FALSE.
Обратите внимание на то, что отрицательные значения — это не ноль, и поэтому
они считаются равными TRUE. Пустая строка и строка ’0’ это FALSE; все остальные
строки — TRUE. В составных типах (массивы и объекты) принята следующая
интерпретация: если значение такого типа не содержит элементов, то оно
считается равным FALSE; иначе подразумевается TRUE.
Операторы сравнения
13
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Операторы сравнения, как и подразумевается в их имени, позволяют сравнивать
две величины.
Таблица 2.5. Операторы сравнения
Пример
Название
Результат
$a == $b
Равно
Истина, если $a эквивалентно $b.
$a != $b
Не равно
Истина, если $a не эквивалентно $b.
$a < $b
Меньше чем
Истина если $a меньше чем $b.
$a > $b
Больше чем
Истина если $a больше $b.
$a <= $b
Меньше или равно
Истина, если $a меньше или равно $b.
$a >= $b
Больше или равно
Истина, если $a больше или равно $b.
$a===$b
Идентично
Истина, если обе переменные совпадают не только
по значению, но и по типу.
$ a != = $
b
Не идентично
Не совпадает значение или тип
Например, если
$ a =” 1”; $ b =1; то $ a ==$ b даст истину, а $ a ===$ b даст
ложь.
PHP всегда осуществляет вычисление выражения. Так, например, оператор Echo
(“7”==7); — выведет 1, потому что значение выражения в скобках истинно, а это
соответствует 1.
Выражения сравнения
Очень распространенный тип выражений — это выражения сравнения. Эти
выражения имеют значение 0 или 1 (означает ложь или истину соответственно).
Подобные выражения в основном используются внутри условий, например
оператора IF.
Не каждое выражение является оператором. Оператор имеет форму
<выражение>;
т. е. выражение, за которым следует точка с запятой.
Оператор вывода
В PHP для вывода используются функции echo (string) и print (string).
Эти функции эквивалентны, но функция echo () активно использовалась в ранних
версиях PHP до PHP3. Однако она поддерживается и последним транслятором.
Echo (“Выведем строку \ n
”);
Print (“Выведем строку \ n
”);
14
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Эти операторы выведут в браузер строку "Выведем строку". Символы \ n в конце
строки сообщают интерпретатору PHP, чтобы он вставил символ новой строки
в конце выведенной строки. Этот символ будет виден только в исходном коде.
Но в браузере не будет никакого указателя перехода на новую строку. Если
мы хотим, чтобы в браузере в тексте HTML был переход на новую строку, то надо
в операции вывода вывести тег HTML перевода на новую строку: Print ("Выведем
строку < br >\ n "); если внутри строки вывода в двойных кавычках находится
идентификатор переменной, то транслятор PHP интерпретирует значение этой
переменной и подставляет его в выводимую строку.
Print (“Значение переменной $ m < br >\ n
”);
Если требуется вывести строку, которая содержит символ
интерпретации, то надо заключить строку в одинарные кавычки:
доллара
без
Print (“Значение переменной”. ‘$ m ‘. “$ m < br >\ n
”);
2.5. Операторы управления
Управляющие
конструкции
предоставляют
в распоряжение
программиста
средства для построения сложных программ, способных проверять условия
и реагировать на изменения значений входных данных во время работы. Короче
говоря, эти структуры управляют выполнением программы.
2.5.1. Условный оператор IF
Условный оператор — это базовый оператор изменения линейного хода
выполнения операций. Синтаксис простого условного оператора в PHP следующий:
if
statement;
(expr)
Здесь exp r — логическое выражение, statement — оператор, простой или
составной. Если логическое выражение exp r равно TRUE (истинно), то PHP
выполнит "statement", а если FALSE — проигнорирует и перейдет к следующему
за statement оператору. Если требуется исполнить больше чем один оператор
по некоторому условию, то необходимо сгруппировать несколько выражений в блок
выражений, используя фигурные скобки. К примеру, следующий код не только
выведет фразу, но и присвоит значение $a переменной $b:
if ($a > $b) { print "a больше b"; $b = $a;
}
Если имеется несколько условий и соответственно несколько действий с ними
связанных,
то следует
использовать
расширенный
условный
оператор,
включающий конструкцию ELSEIF и ELSE.
Каждый раздел ELSEIF имеет свое условное выражение и оператор, который
за ним следует, будет выполнен только в том случае, если это условие равно TRUE.
15
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Раздел ELSE не имеет условия и выполняется в том случае, когда все остальные
условия ложны. Пример:
if ($ a > $ b) {
print " a больше b
";
{
} elseif ($a == $b)
print "a равно b";
} else {
}
print "a меньше b";
Внутри одного выражения IF может быть несколько ELSEIF. Первое выражение
ELSEIF (если таковые есть), которое будет равно TRUE, будет выполнено. В PHP
вы можете написать ’else if’ (два слова), что будет значить то же самое, что и ’elseif’
(одно слово).
Существует альтернативный синтаксис условного оператора
IF():...
ENDIF;
Вместо использования фигурных скобок за "IF(выражение)" должно
следовать двоеточие, одно или несколько выражений и завершающий
ENDIF. Рассмотрите следующий пример:
<?php if ($a==5):?> A = 5 <?php
endif;?>
В этом примере блок "A = 5" внедрен внутрь выражения IF, используемого
альтернативным способом. Блок HTML будет виден, только если $ a равно 5. Этот
альтернативный синтаксис применим и к ELSE и ELSEIF (expr). Вот пример
подобной структуры:
if ($ a == 5):
print " a равно 5";
print "...";
elseif ($a == 6):
print "a равно 6";
print "!!!";
else:
print " a не 5 и не
6";
endif;
16
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
2.5.2. Тернарный оператор
Логическое выражение? оператор1: оператор2
Этот оператор работает следующим образом: если логическое выражение
истинно, то выполняется оператор1, в противном случае — оператор2. Тернарный
оператор очень удобен для встраивания в другие операторы, что нельзя делать
с оператором IF. Пример:
если у нас есть несколько наименований книг, то мы должны вывести один текст,
в противном случае другой:
IF ($ count _ books > 1) {
$ title =”Предлагаем следующие книги”
} else {
}
$ title = “Предлагаем следующую книгу”
С использованием тернарного оператора эта запись будет выглядеть следующим
образом:
$ title = “Предлагаем ”. ($ count _ books > 1? “следующие книги”: “следующую
книгу ”)
2.5.3. Цикл WHILE
Цикл WHILE — простейший тип цикла в PHP3. Он действует как и его аналог
в C. Основная форма оператора WHILE:
WHILE(expr) statement; или
…
WHILE (expr) { statement 1;
statementN; }
Семантика
цикла
стандартная:
предписывает
PHP
выполнять
вложенный(е) оператор(ы) до тех пор, пока логическое выражение expr равно
TRUE. Значение выражения проверяется каждый раз при начале цикла, так что
если значение выражения изменится внутри цикла, то он не прервется до конца
текущей итерации (выполнение всего блока вложенных операторов — это одна
итерация). Если значение expr равно FALSE с самого начала, цикл не выполняется
ни разу. Можно использовать альтернативный синтаксис:
WHILE
ENDWHILE;
(expr):
выражения...
Следующие примеры идентичны — все выводят номера с 1 по 10:
/* пример 1 */
$i = 1;
17
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
while
10)
($i
<=
print $i++;
/* пример 2 */
$i = 1;
while
10):
($i
<=
print $i; $i++;
endwhile;
/* пример 3 */
$i = 1;
while
10){
($i
<=
print $i++; }
2.5.4. Цикл DO..WHILE (цикл с постусловием)
Цикл DO..WHILE очень похож на WHILE за исключением того, что значение
логического выражения проверяется не до, а после окончания итерации. Основное
отличие в том, что DO..WHILE гарантированно выполнится хотя бы один раз, что
в случае WHILE не обязательно. Для циклов DO..WHILE существует только один вид
синтаксиса:
$i = 0;
do {
print $i;
}
($i>0);
while
Этот цикл выполнится один раз, т. к. после окончания итерации будет проверено
значение логического выражения, а оно равно FALSE ($i не больше 0),
и выполнение цикла завершится. Выполнение любого цикла можно прекратить
использованием оператора BREAK. Следующий код демонстрирует такую
возможность:
do {
if ($ i < 5) {
print "
велика";
i
не
достаточно
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
18
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
break;
}
print " изменения в норме ";
process i...
} while (0); // это вечный
цикл.
И выход из этого цикла возможен по одному из операторов
принудительного завершения. Пример: вычисление факториала
Break —
$n = 5;
$ncopy = $n;
$factorial =
факториала
1;
//
Установить
начальное
значение
do {
$factorial = $n * $factorial;
$ n --; // Уменьшить Sn на 1
} while (Sn > 0);
print " Факториал Sncopy равен $factorial";
2.5.5. Цикл FOR
Циклы FOR — наиболее мощные циклы в PHP. Синтаксис цикла FOR:
for (инициализация; условие; приращение)
{
блок
}
Условная часть цикла for в действительности состоит из трех компонентов.
Инициализация выполняется всего один раз и определяет начальное значение
управляющей переменной цикла. Условие проверяется в начале каждой итерации
и определяет, должна ли выполняться текущая итерация или нет. Наконец,
приращение определяет изменение управляющей переменной при каждой
итерации. Возможно, термин «приращение» в данном случае неточен, поскольку
переменная может как увеличиваться, так и уменьшаться в соответствии
с намерениями программиста. Следующий пример демонстрирует простейший
случай применения цикла for:
for ($i = 10; $ i <= 60: $ i +=10) // Обратная косая черта
предотвращает
// возможную интерпретацию переменной $ i при выводе
print "\$i = $i <br>";
Выполнение этого фрагмента дает следующий результат:
19
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
$i
10
=
$i
20
=
$i
30
=
$i
40
=
$i
50
=
$i
60
=
Каждое из выражений в условной части цикла FOR может быть пустым. Если
пусто, условие, то цикл продолжается бесконечно. Это не так бесполезно, как
могло бы показаться, т. к. зачастую вам требуется закончить выполнение цикла,
используя
оператор BREAK
в сочетании с логическим условием, вместо
использования логического выражения в FOR. Рассмотрим следующие примеры.
Все они выводят номера с 1 по 10:
/* пример 1 */
for ($i = 1; $i <= 10; $i++) {
print $i;
}
/* пример 2 */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
/* пример 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i; $i++;
}
/* пример 4 */
for ($i = 1; $i <= 10; print $i,
$i++);
20
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
PHP также поддерживает альтернативный синтаксис FOR:
FOR
(инициализация;
приращение):
условие;
оператор;...; endfor;
Вы можете инициализировать несколько переменных одновременно, разделяя
команды инициализации запятыми:
for ($x=0,$y=0; $x+$y<10; $x++):
$ y += 2; // Увеличить переменную $у на 2
print "\$y = $y "; // Вывести значение переменной
$у
$sum = $x + $y;
print "\surn = $sum<BR>"; // Вывести значение
$sum
endfor;
Результат:
$y = 2 $sum =
2
5
8
Sy = 4 $sum =
$y = 6 $sum =
$y = 8 $sum =
11
Этот пример выводит текущие значения $y и суммы $х и $у. Как видно
из приведенных результатов, выводится значение $sum = 11, хотя эта сумма
выходит за границы условия цикла ($х + $у < 10). Это происходит из-за того, что
при входе в данную итерацию переменная $у была равна 6, а переменная $х была
равна 2. Значения переменных соответствовали условию цикла, поэтому $х и $у
были присвоены новые значения, в результате чего была выведена сумма 11. При
очередной проверке условия сумма 11 превысила пороговое значение 10 и цикл
завершился.
2.5.6. Цикл foreach
Конструкция foreach представляет собой разновидность for, включенную в язык
для упрощения перебора элементов массива. Существуют две разновидности
команды foreach, предназначенные для разных типов массивов: линейных
и ассоциативных массивов. Для линейных применим следующий синтаксис:
foreach (массив as $элемент)
{
21
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
блок }
Для ассоциативных массивов применим иной синтаксис:
foreach (массив as $ключ => $элемент)
{
блок }
Например, при выполнении следующего фрагмента:
$ menu =
"мороженое");
а
rr
ау("яблоки",
"апельсины",
"груши",
"дыня",
foreach ($menu as $item) {
print "$ item < BR >"; }
будет выведен следующий результат:
яблоки
ы
апельсин
груши
дыня
морожен
ое
Отметим следующее: конструкция foreach автоматически возвращается в начало
массива (в других циклических конструкциях этого не происходит). При
использовании цикла foreach нет необходимости явно увеличивать счетчик или
иным способом переходить к следующему элементу массива — это происходит
автоматически при каждой итерации foreach.
Второй вариант используется при работе с ассоциативными массивами:
$ users = array { "Попов А.А." => 100,"Архипова Т.С." => 170,"Быков П.А." =>
40}
foreach ($user as $i => $resource) {
print " Пользователь $ i занимает дисковое пространство объемом $ resource
мегабайт< BR >";}
В этом случае результат выглядит так:
Пользователь Попов А.А. занимает дисковое пространство объемом 100 мегабайт
Пользователь Архипова Т.С. занимает дисковое пространство объемом 170
мегабайт
Пользователь Быков П.А. занимает дисковое пространство объемом 40 мегабайт
22
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
2.5.7. Оператор CONTINUE
Оператор CONTINUE нарушает естественный ход циклов и переходит на начало
ближайшего цикла.
while (list($key,$value) = each($arr)) {
if ($key % 2) { // для четных ключей в
массиве
continue;
}
do_something_odd ($value); }
2.5.8. Оператор переключения или выбора SWITCH
Оператор SWITCH похож на группу операторов IF с одинаковым выражением.
Во многих случаях вам нужно сравнить переменную (или выражение) со многими
различными значениями и выполнить различные фрагменты кода в зависимости
от того, чему будет равно значение выражения. Это наиболее удобно делать
с использованием SWITCH. Следующие 2 примера решают одну и ту же задачу,
но один использует серию операторов IF, а другой — оператор SWITCH.
/* пример 1 */
if ($i == 0) {
print "i равно 0";
}
if ($i == 1) {
print "i равно 1";
}
if ($i == 2) {
}
print "i равно 2";
/* пример 2 */
switch ($i) {
case 0:
print "i равно 0";
break;
case 1:
print "i равно 1";
break;
case 2:
print "i равно 2";
23
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
break; }
SWITCH выполняется последовательно оператор за оператором. В начале код
не исполняется. Только когда встречается оператор CASE с подходящим значением
переключателя (в нашем случае это $ i), PHP начинает выполнять программу. PHP
продолжает выполнять операторы до конца блока SWITCH или пока не встретит
оператор BREAK. Если вы не напишете BREAK в конце цикла операторов, то PHP
продолжит выполнять операторы и следующего SWITCH’а. К примеру:
/* пример 3 */
switch ($i) {
case 0:
print
0";
"i
равно
case 1:
print
1";
"i
равно
case 2:
}
print "i равно ";
В этом случае, если $i равно 0, то PHP выполнит все операторы print! Если $i
равно 1, то PHP выполнит последние два print. И только если $i равно
2, вы получите ожидаемый результат, и выведено будет только ’i равно 2’. Поэтому
необходимо не забывать ставить BREAK (разве что в некоторых случаях
вы специально не захотите их ставить для достижения определенной цели).
Оператор переключения может иметь специальный раздел по умолчанию: ’default
case’. Этот оператор соответствует всем значениям, которые не удовлетворяют
другим case’ам. К примеру:
/* example 4 */
switch ($i) {
case 0:
print "i равно 0";
break;
case 1:
print "i равно 1";
break;
case 2:
print "i равно 2";
break;
default:
print " i не равно ни 0, ни 1, ни 2";
}
24
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Следует помнить, что выражения в CASE могут быть любого скалярного типа,
т. е. целые числа или числа с плавающей запятой, а также строки. Массивы
и объекты нельзя применять в качестве переключателя.
2.6. Функции
2.6.1. Определение функций
Использование функций во многом определяет принципы модульности при
разработке современного программного обеспечения. При помощи функций можно
создавать компоненты многократного использования, которые легко изменяются
при
необходимости
и оказываются
особенно
удобными
при
разработке
Web-приложений,
не содержащих
серьезных
различий
на концептуальном
и практическом
уровне.
Использование
функций
является
неотъемлемой
возможностью построения гибких, масштабируемых программных комплексов.
Сам язык PHP имеет множество встроенных функций. Широкий набор готовых
функций серьезно облегчает разработку реальных проектов.
Функции
могут
создаваться
в любой
точке
программ
РНР,
однако
по соображениям структурной организации кода удобнее разместить все функции,
используемые сценарием, в самом начале сценарного файла. Существует и другой
способ,
заметно
повышающий
эффективность
программирования
и способствующий многократному использованию кода, — выделение функций
в отдельный файл (называемый библиотекой). Библиотеки удобны тем, что
их функции можно использовать в разных приложениях, не создавая лишних копий
и не рискуя допустить ошибки в процессе копирования. Тема организации
библиотек функций будет рассмотрена в конце раздела.
Определение функции обычно состоит из трех частей:
 имени функции;
 круглых скобок,
в которых перечисляются необязательные
параметры, разделенные запятыми;
 тела функции, заключенного в фигурные скобки.
входные
Обобщенный синтаксис функций РНР выглядит так:
{
function имя_функции ([$параметр1. $параметр2,.... $параметр n ])
тело функции }
Имя функции является идентификатором, т. е. представляет совокупность
латинских букв и цифр, и не должно содержать специальных символов. В имени
разрешен знак подчеркивания. После имени функции следуют обязательные
круглые скобки, в которые заключается необязательный список входных
параметров ($параметр1, $параметр2,.... $параметр N). Вследствие относительно
либеральных принципов определения переменных в РНР указывать тип входных
параметров не нужно.
Рассмотрим простой пример использования функции. Предположим, вы хотите
создать функцию для вывода лицензионной информации на Web-странице:
function display_copyright() {
print
"Copyright
©
2006
МБИ
Группа
25
125.
All
Rights
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Reserved.";
}
Функции могут иметь входные параметры. Модифицируем функцию, так чтобы
выводилось сообщение с указанием имени сайта и текущего года. Для вывода
текущего года используем уже известную функцию Date ("Y").
function display_copyright($site_name) {
print "Copyright
Reserved.";
&copy".
date("Y").$site_name.
"
All
Rights
}
Функции могут возвращать значения любых типов, в том числе массивы и списки.
Рассмотрим традиционную функцию вычисления факториала некоторого целого
числа.
Создание функции для вычисления факториала
<?
function fact($n){
if ($n<=0) return 1;
else return $fact = $n * fact($n-1);
}
// Вызываем функцию, задав значение входного параметра в виде //числовой
константы.
$ f = fact (7);
print "Факториал 7: ".$ f.”<br>”;
// зададим параметр некоторой переменной
$m=11;
$k=fact($m);
print "Факториал $ m: ".$ k.”< br >”;
?>
Получим следующие сообщения:
Факториал
7:
5040
Факториал 11: 39916800
Если требуется вернуть набор значений, то надо воспользоваться конструкцией
массива:
<?
function f () {
return
("первый”,"новый","другой");
array
26
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
}
function ff(){
return array(1,2,3);
}
$a=ff();
echo $a[0]." ".$a[1].$a[2]."<br>";
$b=f();
print _ r ($ b);
?>
Будет выведено
1
2
3
Array ([0] => первый [1] => новый [2] => другой)
2.6.2. Аргументы функции
Информация может быть передана функции через список аргументов, которые
являются разделенным запятыми списком переменных и/или констант. PHP
поддерживает передачу аргументов по значению (по умолчанию), по ссылке,
и значения по умолчанию. Когда аргумент передается в функцию по значению,
изменение значения аргумента внутри функции не влияет на его значение вне
функции. Чтобы позволить функции изменять ее аргументы, их нужно передавать
по ссылке. Для этого в определении функции перед именем аргумента следует
написать знак амперсанд «&».
Если вы хотите, чтобы аргумент всегда передавался по ссылке, то следует
поставить амперсанд (&) перед именем аргумента в объявлении функции:
function foo(&$bar) {
$ bar.= ' и дополнительная информация.';
}
$str = ' Исходные данные ';
foo ($str);
echo $ str;
//
выведет:
информация.'
'Исходные
данные
и
дополнительная
Если вы хотите передать аргумент по ссылке, но при определении функции
задана передача аргумента по значению, то добавьте амперсанд перед именем
аргумента в вызове функции.
Функции могут определять значения по умолчанию для скалярных аргументов.
Значение по умолчанию должно быть константой, а не переменной или, к примеру,
членом класса. Когда вы объявляете аргументы по умолчанию, они должны быть
справа от всех «неумолчальных» аргументов, в противном случае это не будет
работать, как задумано. К примеру:
27
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
function comp($sale = 20000, $prem) {
$c=$sale+$prem-0.13*($sale+$prem);
return "К выплате $ c руб.";
}
echo comp
ожидалось
(10000);
//
не
будет
работать,
как
Этот пример выведет следующее:
Warning:
Missing
argument
2
in
call
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 15
to
comp()
in
К выплате.
function comp($prem, $sale =20000) {
$c=$sale+$prem-0.13*($sale+$prem);
return "К выплате $ c руб.";
}
echo comp
работает
(10000);
//
а
вот
это
И выводит следующее:
К выплате
руб.
26100
В PHP4 можно создавать функции с переменным числом аргументов. То есть
мы создаем функцию, не зная заранее, со сколькими аргументами ее вызовут. Для
написания таких функций можно использовать набор встроенных функций
func_num_args() , func_get_arg() , func_get_args() .
Функция
func_num_args() возвращает
число аргументов, переданных
в текущую функцию. Эта функция может использоваться только внутри
определения пользовательской функции.
2.7. Ассоциативные массивы
2.7.1. Инициализация массивов
Массив может инициализироваться одним из двух способов: последовательным
присвоением
значений,
или
посредством
конструкции
array().
При последовательном добавлении значений в массив вы просто записываете
значения элементов массива, используя пустой индекс. Каждое последующее
значение будет добавляться в качестве последнего элемента массива.
Элементы массива нумеруются начиная с 0, а не с 1.
$names[] = "Jill"; //
или $names[0] = "Jill"
28
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
$names[] = "Jack";
или
"Jack"
$names[1]
=
Массив можно инициировать специальной функцией инициализации массива
array ()
$ names = array (“ Jill ”,” Jack ”)
$ names 1 = array (“первый”,”второй”,”третий”,”четвертый”, 5,
6)
В отличие от традиционных языков программирования здесь нет типизации
в массивах. Все массивы считаются ассоциативными, т. е. всегда существует
понятие ключа и понятие элемента массива. В одномерных массивах, если
вы не задаете ключ, им считается индекс. Можно задать сразу ассоциативный
массив
$ arr 1 = array (“первый”=> 1, “второй”=>
2)
тогда обратиться к элементу массива можно по ключу
2
$ arr 1[“второй”] будет равно
2.7.2. Функции по работе с массивами
Название
Назначение
Пример использования
count ($ arr 1)
Число
элементов $b = array(1,” 2”,
на внешнем
уровне
”new=>array(“one”,”two”,” 3”)”);
массива
$ c = count ($ b);
echo $ c; // будет напечатано 3
Next($arr1)
Установка
указателя
на следующий элемент
массива
prev($arr1)
Установка
указателя
на предыдущий
элемент массива
current($arr1)
Установка
на текущий
массива
reset ($ arr)
Сброс
массива
состояние
указателя
элемент
указателя Указатель
находится
в исходное первым элементом
29
перед
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
End ($ arr)
Rang
граница,
граница)
Установка
указателя
на последний элемент
массива
(нижняя Создает и возвращает $ b = rang (2,6);
верхняя массив,
содержащий
// эквивалентно
целые
числа
$ b = array (2,3,4,5,6);
от нижнего
до верхнего
включительно
Array _ pop () –
Получение и удаление $ a = array (1,2,3,4)
последних
элементов
$ b = array _ pop ($ a); /* в $ a
массива
занесется все, кроме последнего
элемента, в $ b останется
последний */
Array_puch($arr, $var,
Добавление элементов $a = array(1,2,3,4)
в конец массива
$b = array_puch($a, “w”,7)
$var1)
// $ b = 6 количеству элементов
нового массива
// $ a =(1,2,3,4,” w ”,7)
Array_shift($arr)
Возвращает
первый $a = array (7,8,9);
элемент
массива
$b= array_shift($a);
и удаляет его, сдвигая
все
последующие // теперь $a=array(8,9) $b=7
элементы
на одну
позицию вперед
Array_unshift($arr)
Добавление элементов
в начало
массива.
Добавляет
все
перечисленные
элементы
в начало
массива, при этом все
последующие
сдвигаются
в конец,
возвращает
новое
число
элементов
массива
List($var1,$var2…)
$a = array (“m1”,”m2”,”m3”);
$b = array_unshift ($a,”n1”,”n2”);
/*$b = 5
$a=
array(“n1”,”n2”,”m1”,”m2”,”m3”)*/
Занесение элементов $a=array(1,2,3,4)
массива в переменные
List ($b1,$b2,$b3,$b4)=$a;
Compact($var1,$var2…) Занесение
набора
переменных в массив.
Создает
массив
из указанных
переменных, их имена
являются
ключами,
а значения значениями
30
$a1=”p1”; $a2=”p2”; $a3=”p3”;
$b = compact(“a1”,”a2”,”a3”);
//
$b=
array(“a1”=>”p1”,”a2”=>”p2”,
// ”a3”=> “p3”)
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
в массиве
Key ()
Получение
значение $a=
ключа
текущего array(“a”=>1,”b”=>2,”c”=>3,4,5);
элемента массива
next($a);
$ k = key ($ a); // напечатает а
Each ($ array)
Получение
текущего Возвращаемый массив имеет 4
элемента массива.
значения
Возвращает в массиве
пару
индекс —
значение
и сдвигает
курсор
на одну
позицию вперед
[0] индекс
[1] значение
[2] ключ
[3] значение
Когда курсор достигает конца
массива
функция
each
()
возвращает
FALSE.
Обычно
используется совместно с LIST
для просмотра всех элементов
массива
Число элементов массива на текущем уровне можно узнать, используя функцию
count ($ arr 1).
Для перемещения по массиву используются функции next ($ arr 1), prev ($ arr
1), current ($ arr 1).
$ name = array (1,2,3,5,6); // одномерный массив из 5
чисел
Отличительной чертой PHP являются ассоциативные массивы и принципы работы
с ними. Создадим массив ассоциативный, т. е. имеется некоторый символьный
индекс, который позволяет обращаться к элементам массива по значению этого
индекса, а не по порядку.
$ mim = array (“ a ”=>100,” b ”=>200,” c ”=>500); // линейный одномерный
ассоциативный массив, a b c – это значения ассоциатора (символьного индекса
массива)
$ mim [“ a ”] будет равно 100
Но к ассоциативному массиву можно обращаться и по индексам:
$ mim [0] тоже равно
100
Можно присваивать значения ассоциативным массивам:
$ mim [“ a ”]= 700 теперь элемент с индексом “ a “ - имеет значение
700.
Массивы можно строить любой глубины вложенности и любой сложности:
31
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
$fruits = array(
"fruits"
array("a"=>"orange","b"=>"banana","c"=>"apple"),
=>
"numbers" => array(1, 2, 3, 4, 5, 6),
"holes" => array("first", 5 => "second", "third"));
Можно создавать «неравномерные» массивы.
$ mm = array (“ aa
(1,2,3,4,5));
”=>1200,300,” bb
”=>400, array
$ mm — массив, состоящий на верхнем уровне из 4 элементов,
последний четвертый элемент этого массива сам является массивом.
при
этом
Count (arr ) — возвращает количество элементов верхнего уровня массива.
Поэтому Count($mm) равно 4.
Обход элементов массива с использованием цикла FOR:
$ mm =
”мандарин”);
array
(“яблоко”,”
апельсин”,
”
банан”,
$count_mm=count($mm);
for ($i = 0; $i < $count_mm; $i++) {
// печать значения текущего элемента
echo (“$ mm [$ i ] < br >\ n ”);
}
each($arr) — возвращает следующую пару <ключ/значение> из массива $ arr
и перемещает курсор массива на следующую позицию. Обычно эта функция
используется для прохода по всему массиву.
Пример использования функции List () и each () для обхода массива:
$countries
=
array
Rica”,de”=>”Germany”,
(“ca”=>
“Canada”,“cr”=>
“Costa
“uk”=>”United Kingdom”,“us”=> “United States”,“ru”=> “Russia”);
while (list($key,$val) = each($countries)) {
print (“Элемент с ключом $ key имеем значение $ val < br > \ n ”);
}
Array _ sum () — суммирование всех элементов массива.
2.7.3. Использование курсора при работе с массивами
Работать с ассоциативными массивами можно с помощью курсора, который
является указателем на текущий элемент массива. Для этого используются
специальные функции:
 reset ($ arr) — сброс курсора или установка в исходное состояние;
 Next ($ arr) — переход к следующему элементу;
32
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
 Prev ($ arr) — возврат к предыдущему элементу;
 Current ($ arr) — установка на текущий элемент массива;
 Key($arr) — получение значение ключа текущего элемента массива.
В PHP существуют специальные функции сортировки массивов.
Sort (arr ) — сортирует элементы в соответствии с числовым и алфавитным
порядком (числа знаки пунктуации буквы). Функция заменяет индексы
на числовые.
asort (array ) — сортирует без изменения символьных индексов.
rsort () — сортируют в обратном порядке.
rasort () — сортируют в обратном порядке по символьным индексам.
ksort () — сортирует массив по ключу.
krsort () — сортирует массив по ключу в обратном порядке.
Natsort () — использует натуральный порядок чисел для сортировки: 1,3,5,10,
а не 1,10,3,5.
Natcasesort () — естественная сортировка, нечувствительная к регистру.
Shuffle () — переставляет элементы массива случайным образом.
2.8. Функции обработки строк
В PHP существует очень большое число специальных функций обработки строк.
С частью из них мы уже познакомились ранее, это прежде всего функции вывода:
print, echo. Для вывода по заданному формату используется специальная функция
printf.
Функции обработки специальных символов:
Htmlspesialchars
эквиваленты.
—
преобразование
специальных
символов
в их HTML-
strip_tags — возращает строку, в которой удалены HTML и PHP теги.
Addcslashes — экранирует спецсимволы.
Stripcslashes — удаляет экранирование символов, произведенное функцией
addcslashes.
Функции работы с частью строк:
Substr — получение подстроки.
Strpos () — определение первой позиции фрагмента в строке.
Strrpos () — определение последней позиции, в которой встречается искомый
символ.
Strstr (строка, искомый фрагмент) — возвращает участок исходной строки,
начиная с заданного фрагмента и до конца. Если фрагмента нет, то возвращает
FALSE.
Stristr (строка, искомый
но не чувствительна к регистру.
фрагмент) —
то же,
что
и функция
strstr,
Strrchr (строка, искомый фрагмент) — возвращает участок исходной строки,
начиная с последнего вхождения заданного фрагмента и до конца.
33
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Str _ repeat () — получение строки из повторяющихся значений.
Substr _ count (строка, искомый фрагмент) — количество вхождений данного
фрагмента в строку.
Strspn (строка, искомый фрагмент) — возвращает длину первого вхождения
символов фрагмента в строку.
Strcspn (строка, искомый фрагмент) — возвращает
фрагмента строки, в котором нет символов фрагмента.
длину
начального
Strlen (строка) — длина строки.
Ltrim — удаление начальных пробелов.
Rtrim или chop — удаление конечных пробелов.
Trim — удаление начальных и конечных пробелов.
Str _ pad — дополнение строки другой строкой до заданной длины.
Chunk _ split
разделителей).
— фрагментирование строки (вставляется последовательность
Strtok — получение строки по частям.
Explode - разделение строки в массив (на части по указанному разделителю).
Implode или join — объединение элементов массива в строку с добавлением
заданного разделителя.
Strcmp — сравнение 2 строк.
Strncmp — сравнение заданного количества первых символов двух строк.
Wordwrap —
разбивает
завершающими символами.
исходный
текст
на строки
с определенными
Str _ replace (исходная строка, первый фрагмент, второй фрагмент) —
заменяет в исходной строке все вхождения первого фрагмента на второй фрагмент.
Substr _ replace (исходная строка, новый фрагмент, координаты места
замены) — замена части исходной строки указанным фрагментом.
Strrev — реверс строки.
Strtoupper — преобразование в верхний регистр.
Strtolower — преобразование в нижний регистр.
Convert _ cyr _ string — конвертация строки из одной кодировки кириллицы
в другую.
Parse _ url — разделение строки url на ее компоненты.
Pars _ str (строка) — интерпретирует строку как URL.
Rawurlencode() — кодирование URL.
Rawurldecode() — декодирование URL.
Str _ repeat (строка, число) — повторяет строку заданное количество раз.
Str _ pad (строка, новая длина,
до заданной длины символами дополнения.
дополнение) —
дополняет
Strtok (строка, разделитель) — возвращает строку по частям.
Crypt (строка) — симметричное шифрование.
34
строку
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Функции по обработке отдельных символов:
Chr (код) — получение символа с указанным кодом.
Ord () — обратно — возвращает ASCII код исходного символа.
Выводы
В ходе изучения данного раздела выяснено следующее:
 язык
PHP является интерпретируемым и не требует предварительного
описания переменных перед их использованием;
 кроме простого оператора присваивания в языке применяются сложные
операторы, совмещающие операцию присваивания с арифметической
операцией или операцией конкатенации строк;
 в базовый набор операторов управления программой входят: условный
оператор, тернарный оператор, операторы цикла While, Do ... while, For
и оператор переключения switch;
 некоторые операторы управления допускают 2 альтернативных синтаксиса
Набор базовых операторов языка относит PHP к современным универсальным
языкам программирования, который позволяет писать программы любого уровня
сложности.
Вопросы для самопроверки
1. Какие операторы в PHP позволяют описать переменные и каким образом
задается при этом тип переменной?
2. Как именуются переменные в PHP, выберите среди следующего списка
правильные и неправильные имена переменных и поясните ваше решение:
1m1,$1m1,$m1,$m1 1, @m1,$M1.
3. Чем отличаются следующие выражения: $a=$b++; $a+=$b; $a=++$b, если
перед выполнением этих действий $b равно 1, чему равно $a в каждом
из выражений, последовательно?
4. После применения функции reset ($ a) где находится курсор массива?
5. Задан массив $ a — его элементами являются либо скалярные значения,
либо линейные массивы, напишите функцию, которая выводит все элементы
данного массива.
6. При вызове программы мы передали
ей конкретного значения, например:
имя
переменной
http:// localhost / kts / pr. php? a
Чему
будут
и Empty($a)?
равны
значения
функций
7. Задан следующий фрагмент программы
$a="10 пончиков
";
$b=10;
35
IsSet($a)
a, но не задали
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
If
$a;
($a=$b)
echo
Echo " разные ";
Что будет выведено? Проверьте, наберите текст и запустите программу, если
ваше предположение не оправдалось, то почему и как можно изменить программу,
чтобы она выводила то, что вы предположили?
36
Download