com_event_sink

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

com_event_sinkConecta eventos de un objeto COM a un objeto PHP

Descripción

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

Conecta eventos del objeto COM variant a un objeto PHP sink_object.

Sea prudente al utilizar esta funcionalidad; si se hace algo similar al ejemplo a continuación, no tiene sentido ejecutarlo en un servidor web.

Parámetros

variant

sink_object

sink_object debe ser una instancia de la clase con nombres de métodos que sigan el dispinterface deseado; se debe utilizar com_print_typeinfo() para ayudar a generar una plantilla de clase para esto.

sink_interface

PHP debe ser capaz de utilizar el tipo por defecto de dispinterface especificado por la Typelib asociada con el objeto variant, pero se puede cambiar esto especificando en el parámetro sink_interface el dispinterface que se desea utilizar.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Historial de cambios

Versión Descripción
8.0.0 sink_interface ahora es nullable.

Ejemplos

Ejemplo #1 Ejemplo de conexiones de eventos COM

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

function
ProgressChange($progress, $progressmax) {
echo
"Progreso de la descarga: $progress / $progressmax\n";
}

function
DocumentComplete(&$dom, $url) {
echo
"Documento $url terminado\n";
}

function
OnQuit() {
echo
"¡Salir!\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;
?>

Notas

Precaución

Antes de PHP 8.0.0, llamar a exit() desde cualquier gestor de eventos no es soportado, y puede causar que PHP se bloquee. Esto puede evitarse lanzando una excepción desde un gestor de eventos, capturando la excepción en el código principal, y llamando a exit() allí.

Ver también

add a note

User Contributed Notes 2 notes

up
1
veggie
8 years ago
I got voice recognition working. I'm not sure why the way I called the sink function made it work but I'm more about results right now. This small example had me rolling on the floor laughing.

<?php
/*
* Search this for more info on the voice stuff:
* Automation Interfaces and Objects (SAPI 5.4)
*/

//directions:
//php friend.php
//then fire up windows voice recognition and turn it on and say stuff

$voice = new COM("SAPI.SpVoice");

print
"Hit control+c to end.\n";
print
"Friend: Hello friend!\n";

$voice->Speak("Hello friend!");

class
listen
{

function
Recognition($StreamNumber, $StreamPosition, $RecognitionType, $ISpeechRecoResult)
{

$phrase = $ISpeechRecoResult->PhraseInfo;
$text = $phrase->GetText();

print
"\nYou:$text\n";


global
$voice;
$say = array('oh', 'nice', 'humm', 'interesting', 'you dont say', 'uh huh', 'right', 'what', 'ha ha', 'you have got to be joking', 'right back at you buddy');
$idx = rand(0, count($say)-1);

print
"Friend: " . $say[$idx] . "\n";
$voice->Speak($say[$idx]);

}

}

$recog = new COM("SAPI.SpSharedRecognizer");

$context = $recog->CreateRecoContext();

//SRERecognition = 16 (default)
//SREAllEvents = 393215
//$context->EventInterests = 393215;

//try to listen to events on context
$listen = new listen(); //event handler
if (!com_event_sink($context, $listen, "RecognizerStateChange"))
{
print
"Unable to sink events\n";
exit;
}

$grammar = $context->CreateGrammar();

$i = $grammar->DictationLoad();

$s = $grammar->DictationSetState(1); //1=on, 0=off

while(true)
{

if(!
com_message_pump(1000))
{
print
".";
}

}

?>
up
0
fjortiz
19 years ago
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");
//...
To Top