Процесс создания серверного сценария делится на два этапа: на класса с бизнес-логикой, который будет фактически оданные, и на объединение его с интегрированной системой чтобы позволить клиенту обращаться к классу.
На первом этапе создается общий скелет будущей страницы, может выступать в качестве начальной точки при разработке проектов, опирающихся в своей работе на JPSpan. Она жит основной каркас, необходимый для работы JPSpan с бизнес-логики, а также ряд вспомогательных ошибочных ситуаций.
На втором этапе создается реализация класса или классов б гики, что требует знания синтаксиса языка РНР, использует объявлении классов. Синтаксис напоминает такие языки За открывающим тегом РНР следует код описания класса, будет включен в листинг позднее. Этот код может размещаться в странице, а может быть оформлен в виде отдельного файла сцена который подключается одной из функций языка РНР.
<?php
// класс с бизнес-логикой будет включен здесь
class Customer
{
// Здесь будет находиться реализация класса Customer
}
В небольших приложениях или простых примерах нередко можно увидеть код прямо внутри страницы. Однако размещение описания в виде отдельного файла значительно облегчает его сопровождение, а того дает возможность многократного использования класса как так и через механизм наследования.
Далее следует очень важная строка:
require_once '../JPSpan/JPSpan.php';
Директива requlre_once сообщает процессору РНР о необходимо в оставшейся части страницы сделать доступным программный находящийся в заданном файле. Если этот файл уже был под директива игнорируется. Путь к файлу, показанный выше, кг о том, что заданный сценарий находится в каталоге того же куда установлен пакет JPSpan. Если это не так, строка пути к должна быть приведена в соответствие с фактическим. Сценарий JPSpan. php невелик; он инициализирует переменную J записывая в нее путь к подкаталогу с тем же именем JPSpan, в к находятся основные классы РНР и файлы с кодом JavaScript.
В следующей строке с помощью переменной JPSPAN подключаемый классов, находящиеся в сценарии PostOffice. php:
require_once '../JPSpan/JPSpan.php';
Вслед за этим создается новый экземпляр класса JPSpan_Server_ Office:
SPostOffice = & new JPSpan_Server_PostOffice();
Файл PostOffice. php содержит определение класса JPSpan_Server Office, используемого во всех приложениях, построенных JPSpan. Он отвечает за создание методов JavaScript, сигнатурных совпадают с сигнатурами методов класса Customer. Эти полученные входные аргументы на сервер с помощью та XmlHrrpRequest и возвращают результаты, полученные от Далее экземпляр класса Customer передается методу addHandler класса
JPSpan_Server_PostOffice:
$PostOffice->addHandler(new CustomerO);
Объект класса JPSpan_Server_PostOffice, задействуя механизм рефлексии, обследует класс реализации бизнес-логики и создает необходимые функции-заглушки JavaScript.
Заключительные строки преследуют двойную цель: передать клиенту весь код JavaScript, необходимый для выполнения запросов к серверному классу, и саму страницу, которая непосредственно занимается обслуживанием запросов. Выполняемое действие определяется на основе несложного анализа URL.
if (isset($_SERVER['OUERY_STRING']) &&
strcasecmp($_SERVER['QUERY_STRING'], 'client') ==0)
{
Функция issetQ проверяет наличие заданной переменной и возвращает true или false. Функция strcasecmpO сравнивает две строки без учета регистра символов и возвращает значение 0, если строки совпадают.
Если URL содержит строку запроса, которая следует за символом знака вопроса, и если в ней находится слово "client", то вызывается метод displayClient(), который возвращает броузеру код JavaScript. (Есть еще возможность сжимать результирующий код, но мы ее запретили, т. к. она требует выполнения некоторых действий, чем снижает производительность сервера.)
SPostOffice->displayClient();
Вы увидите сгенерированный код JavaScript, как только будет написан класс бизнес-логики. Если строка запроса не содержит строку client, то сначала подключается сценарий, который будет заниматься обработкой ошибочных ситуаций:
require_once JPSPAN . 'ErrorHandler.php'; (Порядок обработки ошибок мы обсудим позднее в этой же главе.) А затем вызывается метод serve():
$PostOffice->serve();
Он обрабатывает поступающие запросы и передает аргументы, посланные сценарию, соответствующим методам класса.