Лекция: Языки разработки сценариев Perl и PHP

Язык Perl: синтаксис, основы. Язык PHP: синтаксис, основы.

 

Язык Perl

Язык Perl (Practical Extraction and Report Language) — это язык программирования, сильными сторонами которого считаются его богатые возможности для работы с текстом, в том числе реализованные при помощи регулярных выражений. Также язык известен тем, что имеет огромную коллекцию дополнительных модулей CPAN.

Чтобы запустить программу на языке Perl на выполнение, ее компиляция не требуется, она вполне может выполняться под управлением интерпретатора. Чтобы файл с исходным текстом Perl можно было запускать на выполнение, надо чтобы первая его строка выглядела так:

#!путь_к_интерпретатору_Perl

Основными типами данных в языке являются: скаляры, массивы (скалярные), хеш-таблицы (ассоциативные массивы), функции, файловые дескрипторы и константы.

Переменные разных типов отличаются знаком, который стоит перед именем переменной:

$a - скаляр или указатель

@b - скалярный массив

%c - ассоциативный массив (хеш-таблица)

&d - функция

F - дескриптор ввода-вывода или константа

Скалярные переменные используются для хранения одиночных значений. Они могут содержать числа, строки и ссылки на другие объекты. Перед именем скалярной переменной необходимо ставить знак доллара '$'. Тип скалярной переменной не фиксирован и определяется динамически в зависимости от контекста.

Скалярный массив является упорядоченным списком скаляров. Каждый элемент массива имеет порядковый номер (индекс), с помощью которого к нему можно получить доступ. Нумерация элементов начинается с нуля.

Перед именем переменной типа скалярный массив указывается знак @, а для доступа к определенному элементу массива необходимо ставить знак $, так как определенный элемент массива является скаляром:

@winter = ("декабрь", "январь", "февраль");

print "Второй месяц зимы ", $winter[1], "\n";

Хеш-таблица представляет собой ассоциативный массив, позволяющий ассоциировать строку (ключ) со скаляром (значение). Строка при этом называется ключом, а скаляр в хеш-таблице - значением. Перед именем переменной-списка необходимо ставить знак процента %, а для доступа к определенному элементу массива ставят знак $.

Фактически хеш-таблица представляет собой массив, где в нечетных позициях находятся ключи, а на четных - значения.

Использование ассоциативных массивов напоминает использование массивов скалярных значений, однако индексация производится не целыми числами, а ключевыми словами. Кроме того, индексы заключаются не в квадратные, а в фигурные скобки.

Так, например, для того чтобы присвоить значение трем элементам массива %dict с индексами first, second и third, можно воспользоваться одним из двух способов, указанных ниже.

$dict { 'first' } = "первый";

$dict { 'second' } = "второй";

$dict { 'third' } = "третий";

или

%dict { 'first', 'second', 'third' } =

"первый", "второй", "третий";

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

имя_массива = ( ключ 1, значение 1, ключ 2, значение 2, ... );

Для примера, приведенного выше, это выражение будет выглядеть так:

%dict = ("first", "первый",

"second", "второй",

"third", "третий");

Рассмотрим приведенный следующий фрагмент программы на языке Perl.

while (<STDIN>)

{ print; }

Несмотря на то, что формально программа составлена правильно, она на первый взгляд может показаться бессмысленной. Однако при запуске она ведет себя точно так же, как и одна из программ "эхо". В языке Perl существует предопределенная скалярная переменная $_, используемая по умолчанию. Именно в нее помещаются данные, прочитанные из стандартного ввода, и из нее берется значение для вывода в STDOUT.

Кроме $_ в Perl имеются и другие предопределенные переменные:

  • $] - номер версии Perl.
  • $. - номер строки, прочитанной из файла последней.
  • $! - сообщение об ошибке.
  • $$ - идентификатор текущего процесса.
  • $^T - время в секундах с начала 1970 года до запуска данной программы.
  • $O - имя файла, в котором содержится выполняемая программа.
  • $1...$9 - фрагменты текста, отмеченные при выполнении операции сопоставления с шаблоном.

Подобно предопределенным скалярным переменным, в Perl существуют массивы, имеющие специальное значение. Наиболее важный из них - ассоциативный массив %ENV, содержащий текущие значения переменных окружения. Чтобы получить значение переменной окружения, надо обратиться к элементу данного массива, указав в качестве индекса имя переменной окружения. Так, приведенное ниже выражение записывает в скалярную переменную $path_string значение переменной окружения PATH.

$path_string = $ENV { 'PATH' };

Одна из первых строк CGI-сценария на Perl, может выглядеть так

$method = $ENV { 'REQUEST_METHOD' };

Для работы с файлами и потоками в Perl предусмотрены специальные файловые дескрипторы.

Файловые дескрипторы представляет собой указатель на файл, устройство или PIPE канал, открытые для записи, чтения или для записи и чтения. Оператор "<>" в Perl называется бриллиантовым оператором (diamond operator). Он определяет операцию чтения строки из потока, дескриптор которого содержится в угловых скобках:

$str=<STDIN>; #чтение строки из дескриптора STDIN (стандартного потока ввода)

@lines=<F>; #чтение всех строк из связанного с дескриптором файла F.

print STDOUT $str; #печать в STDOUT (стандартный поток вывода)

Для связывания файла с файловым дескриптором используется функция open. Ниже приводятся варианты использования этой функции:

open дескриптор_потока > имя_файла файл открывается для вывода данных. Если файл с указанным именем отсутствует, создается новый файл.
open дескриптор_потока >> имя_файла файл открывается в режиме, позволяющем записывать данные в конец файла.
open дескриптор_потока +> имя_файла открытый файл становится доступным для чтения и для записи.

Функция

сlose дескриптор_файла

закрывает файл, связанный с указанным дескриптором.

В состав языка Perl входят средства поиска и замены, причем, задавая шаблон для поиска, можно использовать регулярные выражения. Это значит, что сложные операции, встречающиеся в специализированных приложениях, можно легко реализовать в любой Perl-программе.

Оператор поиска m// записывается следующим образом:

m/шаблон/

Если значение переменной $_ содержит подстроку, соответствующую указанному шаблону, оператор поиска возвращает значение true.

Рассмотрим следующий пример:

$_ = <INPUT>;

if (m/Scripts/)

{ print "В URL есть каталог Scripts \n"; }

else

{ print " В URL нет каталога Scripts \n"; }

Оператор замены s/// записывается следующим образом:

s/шаблон поиска/выражение для замены/[набор модификаторов]

При выполнении оператора s/// производится поиск соответствия шаблону, и если поиск завершается успешно, найденная подстрока заменяется указанным выражением. Подобно оператору m//, оператор s/// использует переменную $_. Ниже приведен простейший пример применения оператора s///.

$_ = "CGI-сценарий написан на языке С";

s/C$/Perl/;

print;

В результате выполнения сценария на консоль будет выведена следующая строка:

CGI-сценарий написан на языке Perl

Поскольку символ С содержится в аббревиатуре CGI, поэтому в шаблоне поиска указано, что он должен быть последним в строке.

За последним разделителем в операторе s/// могут следовать один или несколько модификаторов. Назначение некоторых модификаторов приведено ниже.

  • g - глобальный поиск. Если этот модификатор не указан, после обнаружения первого соответствия оператор s/// закончит свою работу. Поэтому при отсутствии модификатора g будет произведено не более одной замены.
  • i - указывает, что при поиске следует игнорировать регистр символов.
  • e - указывает, что последовательность символов для замены следует интерпретировать не как подстроку, а как выражение Perl.

В выражении для подстановки могут присутствовать переменные $1 - $9, и в этом случае необходимо указать модификатор е. Так, например, если требуется интерпретировать десятичное число как код символа, можно воспользоватъся следующим выражением:

s/([0-9]+)/chr($1)/e;

Чтобы поиск или замена производились в строке, содержащейся в нужной переменной, надо использовать следующее выражение:

Переменная =~ оператор_поиска_или_замены

Так, например, для преобразования шестнадцатеричных чисел, содержащихся в переменной $string, в десятичное представление можно использовать инструкцию:

$string =~ s/([0-9A-Fa-f]+)(H|h)/hex($1)/ge;

Язык PHP

Язык PHP (PHP:HypertextPreprocessor) - один из наиболее популярных сценарных языков ввиду своей простоты, скорости выполнения, богатой функциональности и распространенности исходных кодов на основе лицензии PHP.

PHP состоит из ядра и набора подключаемых расширений: для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и др. Возможна разработка своих собственных расширений с их последующим подключением. Хотя и существуют сотни расширений, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя расширений.

Интерпретатор PHP подключается к веб-серверу либо через DLL модуль, созданный специально для этого сервера, либо в виде CGI-приложения.

В настоящее время PHP используется сотнями тысяч разработчиков. Порядка 20 миллионов сайтов сообщают о работе с PHP, что составляет более пятой доли доменов Интернета

Синтаксис PHP подобен синтаксису языка Си. При этом некоторые элементы, как например ассоциативные массивы и цикл foreach, заимствованы из языка Perl.

Для работы программы на PHP не требуется описывать какие-либо переменные, используемые модули, и т.п. Любая программа может начинаться непосредственно с оператора PHP.

<?php

echo 'Hello, world!';

?>

Помимо ограничителей <?php ?>, допускается использование дополнительных вариантов, таких как <? ?> и <script language="php"> </script>. Кроме того, до версии 6.0 допускается использование ограничителей языка программирования ASP <% %>.

Имена переменных начинаются с символа $, тип переменной объявлять не требуется. В отличие от имен функций и классов, имена переменных чувствительны к регистру. Переменные обрабатываются в строках, заключенных в двойные кавычки.

Инструкции завершаются точкой с запятой ()

PHP поддерживает два типа комментариев:

  • в стиле языка С (ограниченные /* */),
  • C++ (начинающиеся с // и идущие до конца строки)

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

К скалярным типам данных относятся

  • целый тип (integer),
  • вещественный тип данных (float, double),
  • логический тип (boolean),
  • строковый тип (string)
  • специальный тип NULL.

К нескалярным типам относится

  • "ресурс" (resource),
  • массив (array)
  • и объект (object).

Тип NULL предназначен для переменных без определенного значения. Значение NULL принимают неиницализированные переменные, переменные инициализированные константой NULL, а также переменные, удаленные при помощи конструкции unset().

Ссылки на внешние ресурсы имеют тип resource. Переменные данного типа, как правило, представляют собой дескриптор, позволяющий управлять внешними объектами, такими как файлы, динамические изображения, результирующие таблицы базы данных и т. п.

Массивы поддерживают числовые и строковые ключи и являются гетерогенными. Массивы могут содержать значения любых типов, включая другие массивы. Суперглобальными массивами (superglobal arrays) в PHP называются предопределенные массивы, которые видны в любом месте исходного кода без использования ключевого слова global.

  • $GLOBALS - массив всех глобальных переменных (в том числе и пользовательских).
  • $_SERVER - содержит множество информации о текущем запросе и сервере.
  • $_ENV - текущие переменные среды. Их набор специфичен для каждой конкретной платформы, на которой выполняется сценарий.
  • $_GET - ассоциативный массив с параметрами GET-запроса. В исходном виде эти параметры доступны в $_SERVER['QUERY_STRING'] и в $_SERVER['REQUEST_URI'] в составе URI.
  • $_POST - ассоциативный массив значений полей HTML-формы при отправки методом POST.
  • $_FILES - ассоциативный массив со сведениями об отправленных методом POST файлах. Каждый элемент имеет индекс идентичный значению атрибута "name" в форме и, в свою очередь, также является массивом со следующими элементами:
    • ['name'] — исходное имя файла на компьютере пользователя.
    • ['type'] — указанный агентом пользователя MIME-тип файла.
    • ['size'] — размер файла в байтах.
    • ['tmp_name'] — полный путь к файлу во временной папке.
    • ['error'] — код ошибки.
  • $_COOKIE - ассоциативный массив с переданными агентом пользователя значениями cookie.
  • $_REQUEST - общий массив вводных данных запроса пользователя как в массивах $_GET, $_POST, $_COOKIE. Начиная с версии PHP 4.1 включается и содержимое $_FILES.
  • $_SESSION - информация о текущей сессии пользователя.

PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка. Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищенными (protected) и скрытыми (private). PHP поддерживает все три основные механизма ООП — инкапсуляцию, полиморфизм и наследование (родительский класс указывается с помощью ключевого слова extends после имени класса). Поддерживаются интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов. Для обращения к методам родительского класса используется ключевое слово parent. Экземпляры класса создаются с помощью ключевого слова new, обращение к полям и методам объекта производится с использованием символов ->. Для доступа к членам класса из его методов используется переменная $this.

Среди наиболее часто используемых возможностей PHP стоит отметить следующие:

  • имеется большой набор функций для работы со строками;
  • работа с регулярными выражениями PCRE.
  • работа с базами данных, осуществляемая посредством модулей:
    • php5-mysql для MySQL,
    • php5-pgsql для PostgreSQL
    • и др.
  • для PHP разработаны средства шаблонирования веб-страниц, позволяющие эффективно разделить представление от модели, например Smarty;
  • имеется библиотека для работы с графическими изображениями GD, позволяющая производить преобразования с графическими файлами, и создавать изображения "на лету".

· 10. Лабораторная работа: Разработка CGI-приложений на Perl и PHP

Цель работы - oзнакомление с: основами языков разработки веб-сценариев на языках Perl и PHP; синтаксисом языков Perl и PHP; реализацией обработки данных, полученых от клиентского приложения, на стороне веб-сервера.

 








Дата добавления: 2015-12-29; просмотров: 968;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.019 сек.