
Раздел 1. Разработка приложений на основе web-технологий.
Тема 1. Основы языка php
Описание языка
Все языки программирования, используемые при разработке web-сайтов, можно разделить на две большие группы.
К первой относятся те из них, код которых выполняется на компьютере посетителя сайта, т. е. в браузере, запущенном на компьютере пользователя. Это известные всем JavaScript и VBScript. Программы на этих языках встраиваются в код web-страниц или выносятся в отдельный файл, обращение к которому осуществляется из web-страницы .
Во вторую группу включаются те языки, программы на которых выполняются на том компьютере, где расположен web-сервер. Эта группа более обширна - дело в том, что в принципе на web-сервере могут исполняться программы на любом языке, даже командных .bat-файлов MS-DOS, важно лишь, чтобы на нем была установлена программа-интерпретатор этого языка, удовлетворяющая стандарту CGI, которому также должен удовлетворять сам web-сервер.
РНР относится ко второй группе - программа на РНР исполняется на web-сервере. Однако от других CGI-языков РНР сильно отличается в лучшую сторону прежде всего своей простотой. При создании программы на РНР не надо заботиться о правах доступа к файлам сценария, не надо прописывать точные пути к различным модулям, нет необходимости следить за отсутствием в файле скрипта недопустимых символов.
Одним из наиболее заметных достоинств РНР является возможность без особых затруднений работать с серверами баз данных. Для работы с подавляющим большинством типов баз данных в РНР есть встроенные функции, поэтому достаточно лишь установить на web-сервере программу работы с базой данных (наиболее часто используется бесплатная MySQL - http://www.mysql.com) и включить в текст PHP-сценария команды работы с ней.
Возможности РНР можно весьма серьезно расширить с помощью дополнительных модулей, содержащих различные функции. Эти модули при необходимости размещаются на web-сервере, на котором установлен PHP-интерпретатор. Большое количество готовых модулей можно загрузить с адреса http://www.php.net, там же в разделе документации приведено и полное их описание. Например, модуль Zlib позволяет работать из программы на РНР с архивами в формате Gzip, а модуль libswf - с Flash-презентациями, создавая и редактируя их прямо из программы на РНР.
В отличие от многих других языков программирования, РНР был создан обычным пользователем, Расмусом Лердорфом, в далеком 1994 году. Цель разработки языка была проста - сделать домашнюю страничку Расмуса более интерактивной, а значит, и более привлекательной для посетителей. Расмус разработал базовый синтаксис и написал первый интерпретатор своего языка, получившего название Personal Home Page Tools - т. е. РНР. Этот интерпретатор мог обрабатывать лишь несколько основных команд, однако начало было положено.
В 1995 году Расмус доработал интерпретатор РНР, соединив его с другой своей программой, умевшей обрабатывать HTML-формы (именовавшейся FI - от "Form Interpretator"), а также сделал так, что интерпретатор, получивший название PHP/FI Version 2, мог становиться частью web-сервера. Это новшество позволило программам на РНР исполняться очень быстро. Кроме того, в том же 1995 году интерпретатор РНР был дополнен возможностями обработки новых команд, в частности, команд для работы с серверами баз данных и автоматического создания gif-файлов . PHP/FI был размещен в Сети для всеобщего использования, и началось его повсеместное распространение. К концу 1997 года РНР использовался более чем на пятидесяти тысячах сайтов.
Web-мастера быстро оценили достоинства нового языка web-программирования, такие как легкость освоения и богатство возможностей, и вскоре традиционные Perl и С стали сдавать свои позиции. Так как исходный код интерпретатора был открыт (а сам интерпретатор, понятно, бесплатен), то энтузиасты стали заниматься его доработкой, и летом 1998 года появился на свет РНРЗ - детище Зива Сураски и Энди Гутманса (Zeev Suraski and Andi Gutmans). РНРЗ был создан практически "с нуля", так как его авторы сочли код предыдущих версий недостаточно эффективным. Кроме того, РНРЗ стал весьма легко расширяемым продуктом. Любой, создавший на основе определенных стандартов модуль расширения РНР, позволяющий, скажем, работать с архивами какого-либо типа, мог этот модуль интегрировать с программными файлами РНР без каких-либо серьезных затрат времени и сил. Уже к концу 1999 года число сайтов, построенных на основе РНР, превысило миллион. Весьма важным достоинством РНР также являлось то, что программы, позволявшие обрабатывать команды РНР, были созданы практически для всех операционных систем, от Windows до Unix и Linux.
В 2000-м году вышла разработанная компанией Zend Technologies четвертая версия интерпретатора РНР, дополненная множеством новых функций. В настоящее время именно она является наиболее распространенной - РНР используется более чем на 20% сайтов Сети.
РНР - язык программирования, выполняющийся на стороне web-сервера, поэтому выполнение его команд нагружает компьютер, на котором установлен интерпретатор этого языка. Вследствие этого на серверах бесплатного хостинга использование РНР обычно невозможно или сопровождается необходимостью установки рекламных баннеров этого сервера. Однако практически на всех серверах платного хостинга проблем с использованием РНР не возникает, и при разработке сайта можно полноценно применять возможности этого языка.
Инструментальные средства разработки
Инструментарий web-разработчика находится в постоянном развитии и усовершенствовании. Регулярно создается большое количество программ – средств разработки разного, иногда принципиально нового, уровня и класса. Поэтому не только начинающему, но и опытному web – программисту достаточно трудно ориентироваться в среде современных программных продуктов, направленных на разработку web-ресурсов
Средства web-разработчика можно условно разделить на три категории:
1) Конструкторы сайтов. К этим средствам можно отнести такие могучие конструкторы, как Macromedia DreamWeaver, Macromedia HomeSite, Adobe Golive, Namo WebEditor, HotDog Professional и др. Основным заданием, которое реализовывается этими программными средствами, является задание разработки интерфейсной части сайта во всем своем многообразии, начиная от стилевых свойств, размещения элементов к структуризации как отдельных страниц, так и сайта, в целом.
2) Программная среда, к которой принадлежат прежде всего, сами языки программирования, такие как PHP, Perl и другие, разные web-ориентированные базы данных, интерпретатор языка PHP (программа, которая обрабатывает файлы, написанные на PHP и преобразовывает их в HTML-страницы), а так же, локальный сервер. Сегодня разработчикам предлагаются готовые составляющие части программных сред, среди которых следует особенно выделить такие:
a) Denwer – русский проект, сборник программных продуктов разработчика на языке PHP.
b) Apache2triad – американский проект. Один из наиболее полных и насыщенных программными продуктами пакетов web-разработчика. Apache2Triad составляет простое и легкое развертывание сетевого программного обеспечения на любом компьютере и является идеальным решением для установки серверных платформ.
c) XAMPP – немецкий проект. Достаточно популярный в среде разработчиков web. Пакет достаточно простой в использовании и имеет удобную панель администрирования. Основными критериями данного дистрибутива является простота, полнота и надежность.
3. PHP отладчики (PHP-редакторы). Они позволяют создавать и редактировать программный код, написанный на разных web-ориентированных языках программирования: PHP Expert Editor 4, PHP Designer 2007 professional , Zend Studio.
Для написания кода на РНР также подходит любой текстовый редактор - от "Блокнота" до "Script Editor" из пакета Microsoft Office, здесь выбор зависит от вашего личного вкуса и желания.
Синтаксические конструкции и переменные
Синтаксис PHP довольно простой. Программы на РНР встраиваются в текст web-страницы так же, как и сценарии на JavaScript, VBScript. Идентификация кода PHP называется «переходом в PHP» (escaping to PHP). Существуют четыре варианта оформления перехода в PHP:
стандартные теги;
короткие теги;
теги script;
теги в стиле ASP.
1) Стандартные теги
Стандартные теги используются программистами PHP чаще остальных способов, что объясняется наглядностью и удобством этой формы записи:
<?php print "Welcome to the world of PHP!"; ?>
У стандартных тегов есть еще одно дополнительное преимущество: за открывающей конструкцией <? следуют символы php, однозначно определяющие тип дальнейшего кода. Это удобно при использовании в одной странице нескольких технологий -- таких, как JavaScript, серверные включения и PHP. Весь текст, расположенный до закрывающего тега ?>, интерпретируется как код PHP.
2) Короткие теги
Короткие теги обеспечивают наиболее компактную запись для перехода в PHP:
<? print "Welcome to the world of PHP!"; ?>
По умолчанию короткие теги не используются, их нужно специально активизировать. Это можно сделать двумя способами:
указать ключ -enable-short-tags при компиляции PHP;
включить параметр short_open_tag в файл php.ini.
3) Теги script
Некоторые текстовые редакторы ошибочно принимают код PHP за код HTML (то есть визуально отображаемый текст), что нарушает работу над web-страницей. Проблема решается использованием тегов script:
<script language="php">
<?php print "Welcome to the world of PHP!"; ?>
</script>
4) Теги в стиле ASP
Четвертый и последний способ оформления внедренного кода PHP -- теги в стиле ASP (Active Server Page). Они похожи на короткие теги, описанные выше, однако вместо вопросительного знака используется знак процента (%):
<%php print "Welcome to the world of PHP!"; %>
Команды РНР обязательно разделяются символом точки с запятой - ";" (символ конца абзаца или конца строки не учитывается никак), после последней в программе команды его можно не ставить. Также символ ";'' не ставится после условных операторов (if, switch) и операторов цикла (for, while и других).
Пример программы на РНР - на рис. 1.
Рис. 1. Программа на РНР (выделена жирным) в тексте web-страницы
Комментарии следует использовать даже в относительно простых и незамысловатых сценариях. В PHP существуют два формата комментариев:
Однострочные комментарии обычно используются для коротких пояснений или примечаний, относящихся к локальному коду.
Многострочные комментарии обычно используются при оформлении алгоритмов на псевдокоде и в более подробных объяснениях.
Оба способа в конечном счете приводят к одинаковому результату и совершенно не влияют на общее быстродействие сценария. Выбор варианта остается за вами.
1) Однострочные комментарии
При оформлении однострочных комментариев используется два стиля комментирования. Оба стиля работают абсолютно одинаково, но в них используются разные служебные символы. В одном случае комментарий начинается с двойного символа «косая черта» (//), а в другом -- с символа фунта (#). Ниже приведены примеры обоих стилей:
<?
// Выбрать цвет роз $rose_color = "red";
# Выбрать цвет фиалок $violet_color = "blue";
print "Roses are $rose_color, violets are $violet_color"
?>
Конечно, оба стиля однострочных комментариев могут применяться для построения искусственных многострочных комментариев, как показано в следующем листинге:
<?
// файл: example. php
// автор: У.Дж.Гилмор
// дата: 24 августа 2000 г.
print "An example with comments";
?>
2) Многострочные комментарии
В PHP существует возможность построения подробных комментариев, занимающих несколько строк. Такие комментарии оформляются в стиле языка С -- их начало и конец обозначаются символами /* и */.
<?
/*
Сценарий: multi_coramment_example.php
Назначение : пример использования многострочных комментариев
Автор: У.Дж.Гилмор
Дата: 14 июня 2000 г.
*/
print "A multiline comment can be found at the top of this script!";
?>
Как видите, многострочные комментарии особенно удобны для вывода относительно длинной сводной информации обо всем сценарии или его части.
Как и во всех языках программирования, в РНР есть возможность работать с переменными - некими объектами, имеющими имя и могущими принимать различные значения. Однако работа с переменными в РНР, пожалуй, самая легкая из всех возможных.
Для введения новой переменной достаточно просто присвоить ей какое-либо значение, а для помещения значения переменной в строку текста, имени файла или параметра команды, нужно просто написать ее имя в том месте, где должно быть ее значение.
Переменные могут объявляться в любой точке сценария PHP, однако от расположения объявления зависит то, откуда можно обращаться к данной переменной.
Чтобы РНР мог отличать переменные от строк или команд, имя переменной должно начинаться со знака доллара - ("$") и не должно содержать пробелов, знаков апострофа и некоторых других символов. При анализе программного кода интерпретатор РНР считает именем переменной все, что содержится между $ и ближайшим к нему символом, недопустимым в имени переменной. Ниже приведены примеры допустимых имен переменных:
$соlоr
$operating_system
$_some_variable
$model
В качестве имен переменных можно также использовать другие переменные - для этого другую переменную следует просто указать на месте имени первой: $$а.
Переменные не надо заранее, разве что за исключением использования их в функциях. Вместо этого переменная объявляется при первом ее использовании в программе.
В PHP поддерживаются шесть основных типов данных:
целые числа;
вещественные числа;
строки;
массивы;
объекты;
логические величины.
1) Целые числа
Целое число не имеет дробной части и представляется последовательностью из одной или нескольких цифр. В PHP поддерживается запись целых чисел в восьмеричной (по основанию 8) и шестнадцатеричной (по основанию 16) системах счисления.
2) Вещественные числа
Вещественные числа (числа с плавающей точкой) отличаются от целых наличием дробной части. Они используются для представления значений, требующих повышенной точности, -- например, температур или денежных величин. В PHP поддерживаются два вещественных формата: стандартная и научная (экспоненциальная) запись.
Стандартная : 12.45, 98,6
Научная: 5.9736е24
3) Строки
Строкой (string) называется последовательность символов, которая рассматривается как единое целое, но при этом обеспечивает доступ к отдельным символам. Примеры строк:
thesaurus
49ers
abc
&%/$#
Обратите внимание: в PHP не поддерживается символьный тип данных. Строковый тип может рассматриваться как единое представление для последовательностей, состоящих из одного или нескольких символов.
4) Массивы
Массив - это совокупность под одним именем перенумерованных переменных. Имя каждой переменной в массиве состоит из имени этого массива и индекса переменной - нечто вроде номера переменной в массиве или ее имени в нем. Индекс переменной может быть цифровым или символьным - т. е. представлять собой либо номер переменной в массиве, либо ее имя в нем.
Например, вот массив с числовыми индексами (нумерация индексов начинается с нуля, а не единицы!):
$а[0]=100; $а[1]=101; $а[2]=102;
а вот с символьными:
$а['first']=100; $а['second']=101; $а['third']=102;
(Массив с числовыми индексами называется еще "скалярным", а с символьными - "ассоциативным".)
Зачем нужны массивы? А для того чтобы можно было к ним обращаться как к чему-то целому, тем самым получая возможность совершать автоматические действия со всеми элементами массива или с частью этих элементов, не указывая имени каждого их элемента.
Иными словами - скажем, в какие-то переменные записали имена клиентов и теперь желаем вывести их. Как это сделать? Естественно, только перебрав все эти переменные, для чего нам понадобятся имена этих переменных, которые придется жестко задать в программе. А если заранее неизвестно, сколько будет клиентов, как тогда быть? Если же имена клиентов поместить в массив, то все их можно перебрать специальной командой, добавить же новое имя тоже нетрудно.
В РНР добавлять элементы в массив можно как явно указывая индекс элемента (например, $а [100] = "Андрей";), так и просто упоминая, в какой массив этот элемент добавляется - $а [ ] ="Андрей" ;. В последнем случае добавляемый элемент становится последним в массиве.
По размерности массивы делятся на одномерные и многомерные.
5) Объект
Объект представляет собой переменную, экземпляр которой создается по специальному шаблону, называемому классом. Концепции объектов и классов являются неотъемлемой частью парадигмы объектно-ориентированного программирования (ООП).
В отличие от других типов данных, поддерживаемых в языке PHP, объекты должны объявляться явно. Необходимо понимать, что объект -- всего лишь конкретный экземпляр класса, используемого в качестве шаблона для создания объектов с конкретными характеристиками и функциональными возможностями. Следовательно, объявление класса должно предшествовать объявлению объектов, создаваемых на их основе. Пример объявления класса и последующего создания объектов на его основе:
class appliance {
var power:
function set_power($on_off) {
$this->power = $on_off;
}
}
...
$blender = new appliance;
Определение класса задает атрибуты и функции, связанные с некоторой структурой данных - в данном примере это структура с именем appliance (устройство). У этой структуры имеется всего один атрибут power (мощность). Для изменения этого атрибута создается метод set_power.
Помните: определение класса - всего лишь шаблон, и выполнять операции с ним в программе невозможно; сначала нужно создать объекты на основе этого шаблона. Объекты создаются при помощи ключевого слова new. Например, в приведенном выше фрагменте создается объект $blender класса appliance.
После создания объекта $blender можно задать его мощность при помощи метода
set_power: $blender->set_power("on");
6) Логические величины
Логический тип данных принимает всего два значения: истинное (true) и ложное (false). Логические величины создаются двумя способами: при проверке условий и в виде значений переменных.
Интерпретатор РНР автоматически определяет тип переменной на основании анализа ее содержимого. Рассмотрим следующий пример:
$sentence = "This is a sentence."; // $sentence интерпретируется как строка
$price = 42.99: // $price интерпретируется как вещественное число
$weight = 185; // $weight интерпретируется как целое число
Для включения числовой или строковой переменной в строку текста достаточно просто поместить переменную туда, где она должна стоять в этой строке. Например, в итоге выполнения кода $а="птица певчая"; $b="Дятел - $а"; переменной $b будет присвоено значение "Дятел - птица певчая".
Помните, что в РНР нельзя для сложения строковых переменных использовать символ "+" - он пригоден лишь для числовых выражений. Поэтому необходимо помещать переменные в строки или использовать команду конкатенации (точку): $с = $а. $b.
Довольно часто используются сокращенные обозначения арифметических действий над переменными и действий по присваиванию им каких-либо значений. Например, команда $а+=3 означает, что переменную $а надо увеличить на 3, что и будет сделано, если она имеет числовой формат. Точно так же команда $а- = 3 уменьшает переменную $ а на 3, а команды $а*=2 и $а/=2 соответственно умножают и делят на два переменную $а. Команда $а.=" строка" эквивалентна команде $а="$а строка".
В РНР применяются также операции инкремента и декремента, т.е. изменения значения переменной на 1. Так, команды $а++ и $а-- соответственно увеличивают и уменьшают значение переменной $а на единицу. То же самое делают и команды ++$а, --$а, однако, в том случае, если подобная команда используется в выражении, они, в отличие от предыдущих, сначала изменяют значение переменной, а потом выдают его в выражение. Иными словами, если переменная $а равна 2, то после выполнения команды $b=$а++; ее значение достигнет 3, а $b будет установлена в 2. В то же время команда $b= + + $а; установит обе переменные в 3.
Область видимости (scope) определяется как область доступности переменной в той программе, в которой она была объявлена. В зависимости от области видимости переменные PHP делятся на четыре типа:
локальные переменные;
параметры функций;
глобальные переменные;
статические переменные
1) Локальные переменные
Переменная, объявленная внутри функции, считается локальной ; другими словами, на нее можно ссылаться только в этой функции. При любом присваивании вне функции будет использоваться совершенно другая переменная, которая не имеет ничего общего (кроме имени) с переменной, объявленной внутри функции. При выходе из функции, в которой была объявлена локальная переменная, эта переменная и ее значение уничтожаются
2) Параметры функций
В PHP, как и во многих других языках программирования, любые параметры, передаваемые функции при вызове, должны быть объявлены в заголовке функции. Хотя параметрам присваиваются аргументы, переданные извне, после выхода из функции они становятся недоступными.
Параметры объявляются в круглых скобках после имени функции.
3) Глобальные переменные
Глобальные переменные, в отличие от локальных, доступны в любой точке программы. Но чтобы изменить значение глобальной переменной, необходимо специально объявить ее как глобальную в соответствующей функции. Для этого перед именем переменной ставится ключевое слово GLOBAL.
4) Статистические переменные
В отличие от переменных, объявленных параметрами и уничтожаемых при выходе из функции, статическая переменная сохраняет свое значение при повторном вызове. Для объявления статической переменной перед ее именем ставится ключевое слово STATIC.
Средства управления, функции