(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
com_event_sink — Connecte des événements d'un objet COM sur un objet PHP
$variant, object $sink_object, array|string|null $sink_interface = null): bool
Connecte des événements de l'objet COM
variant sur l'objet PHP
sink_object.
Il convient d'être prudent lors de l'utilisation de cette fonctionnalité ; si l'on fait quelque chose de similaire à l'exemple ci-dessous, cela n'a pas de sens de lancer sur un serveur Web.
variant
sink_object
sink_object doit être une instance de la classe
avec des noms de méthodes suivant le dispinterface désiré ; il est recommandé
d'utiliser com_print_typeinfo() pour l'aide à la
génération d'un gabarit de classe pour cela.
sink_interface
PHP devrait être capable d'utiliser le type par défaut de dispinterface
spécifié par la Typelib associée avec l'objet variant,
mais il est possible de changer cela en spécifiant dans le paramètre
sink_interface le dispinterface que l'on
souhaite utiliser.
| Version | Description |
|---|---|
| 8.0.0 |
sink_interface est désormais nullable.
|
Exemple #1 Exemple de connexions d'événements COM
<?php
class IEEventSinker {
var $terminated = false;
function ProgressChange($progress, $progressmax) {
echo "Progression du téléchargement : $progress / $progressmax\n";
}
function DocumentComplete(&$dom, $url) {
echo "Document $url terminé\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;
?>Antérieur à PHP 8.0.0, appeler exit() depuis n'importe quel gestionnaire d'événement n'est pas supporté et peut faire planter PHP. Ceci peut être contourné en lançant une exception depuis un gestionnaire d'événement, en attrapant l'exception dans le code principal, et en appelant exit() depuis celui-ci.