Модель 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();

?>

//////////////////////////////////////////////////////////////