©
This document uses PHP Chinese website manual Release
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
com_event_sink — Connect events from a COM object to a PHP object
$comobject
, object $sinkobject
[, mixed $sinkinterface
] )
Instructs COM to sink events generated by
comobject
into the PHP object
sinkobject
.
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.
comobject
sinkobject
sinkobject
should be an instance of a class with
methods named after those of the desired dispinterface; you may use
com_print_typeinfo() to help generate a template class
for this purpose.
sinkinterface
PHP will attempt to use the default dispinterface type specified by
the typelibrary associated with comobject
, but
you may override this choice by setting
sinkinterface
to the name of the dispinterface
that you want to use.
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 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" );
// note that you don't need the & for PHP 5!
$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 ;
?>
[#1] fjortiz [2005-07-14 00:33:29]
In case someone needs a skeleton sink for ADODB.Connection events:
class ADOConnectionEventSink {
function BeginTransComplete( $translevel, $objerror, $status, $objconn ) {
return 0;
}
function CommitTransComplete( $objerror, $status, $objconn ) {
return 0;
}
function RolbackTransComplete( $objerror, $status, $objconn ) {
return 0;
}
function WillConnect ( $ConnectionString, $userid, $psword, $options, $status, $objconn ) {
return 0;
}
function ConnectComplete ( $objerror, $status, $objconn) {
return 0;
}
function Disconnect( $status, $objConn ) {
return 0;
}
function WillExecute ( $src, $cursortyp, $locktyp, $options, $status, $objcomm, $objrs, $objconn ) {
return 0;
}
function ExecuteComplete ( $recaffected, $objerror, $status, $objcomm, $objrs, $objconn ) {
return 0;
}
function InfoMessage ( $objerror, $status, $objconn) {
return 0;
}
}
// later on...
$db = new COM("ADODB.Connection", NULL, $charPage);
$sink = new ADOConnectionEventSink();
com_event_sink($db, $sink, "ConnectionEvents");
//...