Модель Component Object Model (COM, модель многокомпонентных обьектов) представляет собой архитектуру программного обеспечения , разработанную компанией Microsoft, которая позволяет абстрагировать части программы в виде двоичних компонентов. Модель COM определяет стандарт взоимадействия компонентов и специальные характеристики , которими они должны обладать. Она не зависит от языка программирования.
Доступ к обьектам COM может осуществлять любое приложение или среда программирования , например Visual Basic, Delphi или PHP.
Кроме COM , существует распределенная модель многокомпонентных обьектов (Distributed Component Object Model), которая вводит компоненты COM в мир распределенных сетевых приложений. Эта модель представляет собой , прежде всего , протокол для обращения к удаленным обьектно-ориентированным процедурам , которий может использоваться в распределенных многокомпонентных системах. Пакет PHP 4.0 на платформе Win32 поддерживает и модель COM , и модель DCOM. В настоящее время на других платформах, для которых существует программное обеспечение модели COM , таких как Apple или Solaris , система PHP 4.0 не работает.
Обратиться к эелементу управления (D)COM средствами PHP 4.0 несложно. Имя COM является зарезервированным именем класса, екземпляры которого можно создавать , передавая конструктору имя соответствующего элемента управления . Вы получаете полноправный экземпляр обьекта COM, который может выполнять различные функции , устанавливать и получать значения свойств , как если ето был класс PHP. Для свойств , имена которых нельзя выразить средствами синтаксиса PHP (если они , например , содержат точку) , можно использовать следуюшие вспомогательные функции:
bool com_set(class com_object, string property_name, string property_value)
Устанавливает значение соответствующего свойство обьекта COM, экземпляр которого представлен переменной com_object.
mixed com_get(class com_object, string property_name)
Данная функция позволяет получить значение заданного свойства обьекта COM, экземпляр которого представлен переменной com_object.
В PHP 3.0 использовать класс COM нельзя. Вместо этого вы можете использовать функции com_load(), com_invoke(), com_set(), com_get().
Давайте начнем с специфичной информацией о том , как использовать COM функции в PHP 4.0 . Чтобы монипулировать компонентом нам нужен COM оператор и OLE программный идентификатор обьекта ->
<?php
$instance = new COM("$идентификатор");
?>
Мы уже сказали , что слово COM в PHP 4.0 является зарезервированным . Теперь когда у нас обьект COM класса мы можем манипулировать ею следуйщим образом
<?php
$instance->[Object]->[method1]->[method2]->...
?>
Чтобы создать Instance обьекта удаленного компютера , нужно сделать следующее .
<?php
$instance = new COM( $identifier, "remote server address");
?>
Идентификатор должен выглядеть следующим образом -> "Word.Application", "Excell.Application", PdfDistiller.PdfDistiller" ...
Вот несколько примеров PHP , использующих COM
///////////////////////////////////////////////////////////////////////
// starting word
$word = new COM("word.application") or die("Unable to instanciate Word");
print "Loaded Word, version {$word->Version}\n";
//bring it to front
$word->Visible = 1;
//open an empty document
$word->Documents->Add();
//do some weird stuff
$word->Selection->TypeText("This is a test...");
$word->Documents[1]->SaveAs("Useless test.doc");
//closing word
$word->Quit();
//free the object
$word->Release();
$word = null;
//////////////////////////////////////////////////////////////////////
$conn = new COM("ADODB.Connection") or die("Cannot start ADO");
$conn->Open("Provider=SQLOLEDB; Data Source=localhost;
Initial Catalog=database; User ID=user; Password=password");
$rs = $conn->Execute("SELECT * FROM sometable"); // Recordset
$num_columns = $rs->Fields->Count();
echo $num_columns . "\n";
for ($i=0; $i < $num_columns; $i++)
{
$fld[$i] = $rs->Fields($i);
}
$rowcount = 0;
while (!$rs->EOF)
{
for ($i=0; $i < $num_columns; $i++)
{
echo $fld[$i]->value . "\t";
}
echo "\n";
$rowcount++; // increments rowcount
$rs->MoveNext();
}
$rs->Close();
$conn->Close();
$rs->Release();
$conn->Release();
$rs = null;
$conn = null;
////////////////////////////////////////////////////////////
An easy way to send e-mail using your default Outlook account:
<?
$objApp = new COM("Outlook.Application");
$myItem = $objApp->CreateItem(olMailItem);
$a=$myItem->Recipients->Add("admin@purplerain.org");
$myItem->Subject="Subject";
$myItem->Body="This is a Body Section now.....!";
$myItem->Display();
$myItem->Send();
?>
//////////////////////////////////////////////////////////////