Функции, описанные в этой главе, позволяют создать интерфейс с внешними объектными уровнями. При этом PHP обычно создает экземпляр объекта из другой среды и рассматривает его в качестве естественного объекта. Стандарты COM и CORBA являются двумя конкурирующими стандартами упаковки функциональных блоков, предназначенных для повторного использования, в объекты, которые потом может использовать любой язык программирования. Java - это язык программирования, но для PHP он тоже является другой системой с внешними объектами.
18.1. COM-модель
Модель компонентных объектов (Component object model, COM) представляет собой структуру, которая позволяет разделять исполняемые модули без перекомпиляции. При работе с ОС Windows работа ведется с динамическими библиотеками (Dynamic-link library, DLL), являющимися наборами функций, которые программа может загрузить по необходимости. С DLL-библиотеками может одновременно работать несколько программ. К сожалению, DLL-библиотеки, хорошо совместимые с одними языками программирования, не могут работать с другими. Эту проблему и призвана решить COM-модель. Объекты COM-модели доступны для C++, Visual Basic, PHP и многих других языков программирования.
Конечно, курс обучения COM-модели выходит за рамки этой книги. Список литературы, рекомендованной компанией Microsoft, достаточно длинен, и его можно найти по адресу <http://www.microsoft.com/com/tech/com.asp>. Однако чтение только статей, посвященных этой теме, может потребовать слишком много времени.
Начать знакомство можно с книги GUI's Gentle Guide to COM (<http://www.microsoft.com/com/news/drgui.asp>).
Есть два способа работы с COM-объектами в PHP. В первом случае объект загружается с помощью com_load. После этого методы вызываются с помощью утилиты com_invoke, свойства можно принять и установить с помощью утилит com_propget и com_propset. Этот способ имеет определенные ограничения. Второй способ заключается в том, что объекты инициализируются с помощью new COM. После этого объект считается аналогичным любому другому PHP-объекту. Зеев Сураски (Zeev Suraski) добавил в PHP поддержку COM.
object COM::COM(string module, string server, integer code_page)
Для создания COM-объекта в сценарии используется COM-класс (листинг 18.1). Этот конструктор для работы требует только имя COM-модуля, который использует идентификатор программы. Существует вариант загрузки удаленного объекта по адресу COM-модуля в Internet с указанием необязательного аргумента server. В таком случае необходимо активизировать DCOM в php.ini . При этом необязательный аргумент code_page может иметь одно из следующих значений: CP_ACP, CP_MACCP, CP_OEMCP, CP_SYMBOL, CP_THREAD_ACP,CPJJTF7 или CPJJTF8.
ЛИСТИНГ 18.1. Функция COM::COM
<?php
//создать объект ADO
$adodb = new OOM("ADODB.Connection"); //подключиться к файлу MS Access $adodb->Open("PROVIDER=MSDASQL; " .
"DRIVER={Microsoft Access Driver (*.mdb)};
"DBQ=C:Program FilesMicrosoft Office" .
"OfficeSamplesinventry.mdb"); //выполнить запрос $recordset = $adodb->Execute(
"SELECT * FROM [Household Inventory]"); //определить количество столбцов $columns = $recordset->Fields->Count(); //распечатать заголовки таблиц print('<table border="1"><tr>'); for($c=0; $c < $columns; $c++)
{
$f = $recordset->Fields($c); print("<th>$f->Name</th>");
}
print("</tr>n"); //распечатать каждую строку while(!$recordset->EOF)
{
print("<tr>");
for($c=0; $c < $columns; $c++)
{
$f = $recordset->Fields($c);
print("<td>$f->Value</td>");
}
print("n");
$recordset->MoveNext(); print("</tr>n");
}
print("</table>n");
// очистка
$recordset->Close(); $adodb->Close(); $recordset->Release(); $adodb->Release(); $recordset = null; $adodb = null;
?>
integer com_addref(object com)
Функция comJaddref увеличивает счетчик ссылок на единицу и возвращает новый счетчик.
boolean com_event_sink(object com, object sink_object, string interface)
Функция com_event_sink (листинг 18.2) соединяет события COM с объектом обработки PHP. Необязательный аргумент interface устанавливает используемый интерфейс.
I Листинг 18.2. Функции com_event_sink И com_message_pump
<?php
class MSIEjEventHandler
{
var $quit = FALSE;
function NavigateComplete2($d, $url)
{
print(date("H:i:s") .
" NavigateComplete2 $urln");
}
function OnQuit()
{
$this->quit = TRUE;
}
}
//это должно работать всегда
setJtimeJlimit(0);
//открыть MS Internet Explorer
$msie = new COMC'internetexplorer.application"); //создать новую программу обработки $sink = new MSIEJEventHandler(); //register sink
com_event_sink($msie, $sink, "DWebBrowserEvents2"); // отобразить браузер $msie->Visible = true; while(!$sink->quit)
{
//выдавать по одному сообщению в секунду comJmessageJpump(1000);
}
$msie = null;
?>
value com_get(resource com, string property)
Функция comJget возвращает свойства объекта COM.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Объектные уровни
15-04-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Базы данных. Часть Тридцать Пятая. | PHP. Объектные уровни. Часть Вторая. |