com_event_sink
com_event_sink
Connect events from a COM object to a PHP object
bool **com_event_sink** variant $variant object $sink_object $sink_interface
Instructs COM to sink events generated by
into the PHP object
.
variant``sink_object
Be careful how you use this feature; if you are doing something similar to the example below, then it doesn't really make sense to run it in a web server context.
variant
sink_object
should be an instance of a class with
methods named after those of the desired dispinterface; you may use
to help generate a template class
for this purpose.
sink_object``com_print_typeinfo
sink_interface
PHP will attempt to use the default dispinterface type specified by
the typelibrary associated with , but
you may override this choice by setting
to the name of the dispinterface
that you want to use.
variant``sink_interface
return.success
Voorbeeld: COM event sink example
<?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;
?>
Let op: > Prior to PHP 8.0.0, calling from any of the event handlers is not supported, and may cause PHP to hang. This can be worked around by throwing an exception from the event handler, catching the exception in the main code, and calling from there.
exit``exit
com_print_typeinfo``com_message_pump