Связать сообщения объекта COM с объектом PHP

# com_event_sink

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

com_event_sink — Связать сообщения объекта COM с объектом PHP

### Описание

function com_event_sink(variant `$variant`, object `$sink_object`, array|string|null `$sink_interface` = `null`): bool

Обязывает объект COM пробрасывать сообщения, созданные `variant` в объект PHP `sink_object`.

Будьте осторожны с этой возможностью. Если вы будете делать что-то похожее на пример ниже, то это не будет иметь никакого смысла при запуске в контексте веб-сервера.

### Список параметров

`variant`

`sink_object`

  `sink_object` должен быть экземпляром класса с методами, названными как в выбранном диспетчерском интерфейсе; вы можете использовать функцию com_print_typeinfo() для помощи в генерации шаблона класса.

`sink_interface`

  PHP будет пытаться использовать тип диспетчерского интерфейса по умолчанию, как указано в библиотеке типов, связанной с `variant`, но вы можете изменить такое поведение, задав в `sink_interface` имя желаемого диспетчерского интерфейса.

### Возвращаемые значения

Функция возвращает `true`, если выполнилась успешно, или `false`, если возникла ошибка.

### Список изменений

Версия | Описание
--- | ---
8.0.0 | `sink_interface` теперь допускает значение null.

### Примеры

Пример #1 Пример com_event_sink

    <?php
    class IEEventSinker {
        var $terminated = false;

       function ProgressChange($progress, $progressmax) {
          echo "Прогресс загрузки: $progress / $progressmax\n";
        }

        function DocumentComplete(&$dom, $url) {
          echo "Загрузка $url завершена\n";
        }

        function OnQuit() {
          echo "Quit!\n";
          $this->terminated = true;
        }
    }
    $ie = new COM("InternetExplorer.Application");
    $sink = new IEEventSinker();
    com_event_sink($ie, $sink, "DWebBrowserEvents2");
    $ie->Visible = true;
    $ie->Navigate("http://www.example.org");
    while(!$sink->terminated) {
      com_message_pump(4000);
    }
    $ie = null;
    ?>

### Примечания

Предостережение

До PHP 8.0.0 вызов exit() из любого обработчика события не поддерживался и мог привести к зависанию PHP. Это можно обойти, выбрасывая исключение из обработчика события, перехватывая исключение в основном коде и вызывая оттуда exit().

### Смотрите также

- com_print_typeinfo() - Печатает определение класса PHP для интерфейса, наследующего IDispatch
- com_message_pump() - Обработка сообщений COM, пришедших не позднее timeoutms миллисекунд после её запуска

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open