PHP 4 на практике

       

Поддержка СОМ в РНР


Стандартные функции РНР, предназначенные для работы с СОМ, создают объекты СОМ и используют их свойства и методы. Пожалуйста, не забывайте о том, что эта поддержка присутствует только в версии РНР для Windows. Следующие примеры были протестированы для Microsoft Word 2000. За информацией об объектах, методах и событиях, используемых в программе, обращайтесь на web-сайт MSDN (http://msdn.microsoft.com/library/officedev/off2000/ wotocobjectmodelapplication.htm).

Создание экземпляров объектов СОМ

Экземпляры объектов СОМ создаются вызовом new, как при обычном объектно-ориентированном программировании. Синтаксис:

object new СОМ("обьекг.класс" [, string удаленный_адрес])

Параметр объект.класс определяет модуль СОМ, присутствующий на сервере. Необязательный параметр удаленный_адрес используется в том случае, если объект СОМ создается на удаленном компьютере. Допустим, вы хотите создать экземпляр объекта для приложения MS Word. При этом приложение Microsoft Word запускается так, словно вы запустили его вручную (разумеется, для этого MS Word должен быть установлен на компьютере). Команда имеет следующий синтаксис:

$word=new COM("word.application") or die("Couldn't start Word!");

После того как экземпляр объекта СОМ будет создан, можно приступать к работе с различными методами и свойствами этого объекта. Допустим, вы захотели активизировать окно Word. Следующая команда изменяет атрибут видимости объекта, в результате чего графический интерфейс приложения отображается на экране:

$word->visible = 1:

He огорчайтесь, если эта команда выглядит непонятной. Вызов методов объектов СОМ рассматривается в следующем разделе.

Вызов методов объекта СОМ

Методы объектов СОМ вызываются в типичном для ООП формате, с использованием ссылки из объектной переменной. Синтаксис:

объект->имя_метода([значение, ...])

Объект соответствует экземпляру объекта СОМ, созданному описанным выше способом. Параметр имя_метода определяет имя метода, определенного в классе объект. Необязательный параметр значение позволяет передавать параметры при вызове методов, допускающих (или требующих) дополнительных данных. Как и при вызове обычных функций, параметры разделяются запятыми. Если после создания экземпляра объекта СОМ, представляющего MS Word, вы захотите создать в приложении новый документ, просто вызовите соответствующий метод. Задача решается методом add( ) субкласса Documents экземпляра $word:




$word->Documents->Add( );

Обратите внимание: для вызова методов используется очень логичный синтаксис в стиле ООП. В результате выполнения этой команды в окне приложения MS Word открывается новый документ.

com_get( )

Функция com_get( ) возвращает значение свойства объектов СОМ. Синтаксис:

mixed com_get(resource объект, string свойство)

Первый параметр определяет экземпляр объекта СОМ, а второй — атрибут класса, к которому относится данный экземпляр.

<?

// Создать экземпляр объекта для приложения MS Word

$word=new COM("word.application") or die("Couldn't start Word!");

// Режим CapsLock либо включен (свойство CapsLock = 0),

// либо выключен (свойство CapsLock = 1).

$flag = com_get(Sword->Application.CapsLock)

// Преобразовать значение Sflag (0 или 1) в логическое значение

if ($flag == 1) :

$flag = "YES";

else :

$flag = "NO";

endif;

// Вывести сообщение

print "CAPS Lock activated: $flag";

$word->Quit();

?>

Существует и другое решение — значение атрибута CapsLock можно получить при помощи стандартного для ООП синтаксиса обращения к атрибутам. В предыдущем примере для этого следует заменить строку

$flag = com_get($word->Application,CapsLock)

следующей строкой:

$flag = $word->Application->CapsLock:

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

com_set( )

Функция com_set( ) присваивает атрибуту объекта новое значение:

void com_set(resource объект, string свойство, mixed значение)

Первый параметр определяет экземпляр объекта СОМ, а второй — атрибут класса, к которому относится данный экземпляр. Третий параметр определяет новое значение свойства.

Следующая программа (листинг 15.6) запускает Microsoft Word и активизирует окно приложения. Затем она создает новый документ, добавляет в него строку текста и выбирает режим сохранения документа (атрибут DefaultSaveFormat) в текстовом формате. Результат виден при открытии окна Сохранить как (Save As) — в списке Тип файла (Save As Type) автоматически выбирается строка Только текст (Text Only). После сохранения документа приложение Microsoft Word закрывается.



Листинг 15.6.

Выбор типа документа по умолчанию

<?

// Создать экземпляр объекта для приложения MS Word

$word-new COMC'word.application") or die("Couldn't start Word!");

// Активизировать окно MS Word $word->visible = 1;

// Создать новый документ $word->Documents->Add();

// Вставить в документ фрагмент текста

$word->Selection->Typetext("php's com functionality is cool\n");

// Выбрать текстовый режим сохранения

$ok = com_set($word->Application, DefaultSaveFormat, "Text");

// Запросить у пользователя имя и сохранить документ.

// Обратите внимание: по умолчанию документ сохраняется

// в текстовом формате! $word->Documents[l]->Save;

// Выйти из MS Word

$word->Quit();

?>

Существует и другое решение — новое значение атрибута DefaultSaveFormat можно присвоить непосредственно, как обычной переменной. В листинге 15.6 для этого следует заменить строку

$ok = com_set($word->Application, DefaultSaveFormat, "Text");

следующей строкой:

$word->Application->DefaultSaveFormat = "Text";

Итак, вы получили общее представление об управлении приложениями Windows через поддержку СОМ в РНР. Мы переходим к занимательному примеру, кото-

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


Содержание раздела