COM 및 .Net(Windows) com_event_sink
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
com_event_sink — COM 개체에서 PHP 개체로 이벤트 연결
설명
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
는 원하는 dispinterface의 이름을 따서 명명된 메서드가 있는 클래스의 인스턴스여야 합니다. 이 목적을 위한 템플릿 클래스를 생성하는 데 도움이 되도록 com_print_typeinfo()를 사용할 수 있습니다.sink_interface
- PHP는
variant
과 관련된 typelibrary에 의해 지정된 기본 dispinterface 유형을 사용하려고 시도하지만,sink_interface
를 사용하려는 dispinterface의 이름으로 설정하여 이 선택을 재정의할 수 있습니다.
반환 값
성공하면 true
를, 실패하면 false
를 반환합니다.
변경 로그
버전 | 설명 |
---|---|
8.0.0 | sink_interface 는 이제 nullable입니다. |
Examples
예제 #1 COM 이벤트 싱크 예제
<?php
class IEEventSinker {
var $terminated = false;
function ProgressChange($progress, $progressmax) {
echo "Download progress: $progress / $progressmax\n";
}
function DocumentComplete(&$dom, $url) {
echo "Document $url complete\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 클래스 정의 출력
- com_message_pump() - COM 메시지 처리, 최대 timeoutms 밀리초 동안 휴면