La clase COM

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

Descripción

La clase COM permite crear una instancia de un objeto COM compatible con OLE y llamar sus métodos y aceder sus propiedades.

$obj = new COM("Application.ID")

Métodos

COM::__construct ( string $module_name [, mixed $server_name [, int $codepage [, string $typelib ]]] )

Constructor de la clase COM. Los parámetros tienen los siguientes significados:

module_name
Puede ser un ProgID, Class ID o Moniker que tenga el nombre del componente a cargar. Un ProgID tipicamente es el nombre de la aplicación o DLL seguido por un punto, seguido del nombre del objeto, ej.: Word.Application. Un Class ID es el UUID que identifica unívocamente una clase dada. Un Moniker es una forma especial de denominación, similar en concepto a un esquema URL, que identifica un recurso y especifica como debería ser cargado. Como ejemplo, se puede cargar Word y obtener un objeto representando un documento de word especificando el camino completo al documento de word como el nombre del módulo, o puede usar LDAP: como un moniker para usar la interfaz ADSI a LDAP.
server_name
El nombre de un servidor DCOM en donde el componente debería ser cargado y ejecutado. Si es NULL el objeto es ejecutado usando el predeterminado para la aplicación. Lo predeterminado típicamente es ejecutarlo sobre la máquina local, aunque el administrador puede configurar la aplicación para ejecutarlo en una máquina diferente. Si se especifica un valor distinto de NULL para el servidor, PHP se reusará a cargar el objeto a no ser que la opción de configuración sea TRUE.

Si server_name es un array, este debería contener los siguientes elementos (distinguiendo mayúsculas de minúsculas!). Note que son todos opcionales (aunque se necesita especificar Username y Password juntos); si se omite el elemento Server, será usado el servidor predeterminado (como se menciona más arriba), y la creación de la instancia del objeto no será afectada por la directiva .

Nombre de servidor DCOM
server_name clave Tipo Descripción
Server string Nombre del servidor.
Username string El nombre de usuario para conectarse.
Password string La clave para Username.
Flags integer Una o más de las siguientes constantes, unidas por un OR lógico: CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER, CLSCTX_REMOTE_SERVER, CLSCTX_SERVER y CLSCTX_ALL. El valor predeterminado si no se especifica aquí es CLSCTX_SERVER si tambien se omitió Server, o CLSCTX_REMOTE_SERVER si se especificó un servidor. Se debe consultar la documentación de Microsoft para CoCreateInstance para más información sobre el significado de estas constantes; típicamente nunca suelen usarse.

codepage
Especifica la página de código que es usada para convertir las cadenas a cadenas unicode y viceversa. La conversión es aplicada cuando una cadena PHP es pasada como parámetro o devuelta desde un método de este objeto COM. La página de código es pegajosa en PHP 5, lo que significa que se propaga a objetos y variantes devueltos por el objeto. Los posibles valores son CP_ACP (Usando la página de código ANSI predeterminada - si este parámetro se omite es lo predeterminado), CP_MACCP, CP_OEMCP, CP_SYMBOL, CP_THREAD_ACP (usando la página de código/localización establecida para el hilo de ejecución actual), CP_UTF7 y CP_UTF8. Tambien puede usar el número de una página de código; consulte la documentación de Microsoft para más detalles sobre los códigos de páginas y sus valores numéricos.

Métodos sobrecargados

El objeto devuelto es un objeto sobrecargado, lo que significa que PHP no ve ningún método fijo como lo hace con las clases regulares; en su lugar, cualquier acceso de propiedad o método son pasados a través de COM.

Comenzando con PHP 5, PHP automáticamente detectará métodos que acepten parámetros por referencia, y automáticamente convertirá las variables regulares de PHP a una forma que pueden ser pasadas por referencia. Esto significa que puede llamar los métodos muy naturalmente; no hay necesidad de ningún esfuerzo extra en su código.

En PHP 4, para pasar parámetros por referencia necesita crear una instancia de la clase VARIANT para envolver los parámetros byref.

Pseudo Métodos

En versiones de PHP anteriores a 5, un número no muy agradables de trucos significaba que los siguientes nombres de métodos no sean pasados a través de COM y fueran directamente controlados por PHP. PHP 5 elimina todo esto; lea los detalles a continuación para determinar como corregir su código. Estos nombres de métodos mágicos son insensible a las mayusculas.

COM::AddRef ( void ) : void

Agrega artificialmente una referencia de contador al objeto COM.

Advertencia

No debería tener necesidad de usar este método. Existe como un complemento lógico al método Release() a continuación.

COM::Release ( void ) : void

Remueve artificialmente una referencia de contador al objeto COM.

Advertencia

No debería tener necesidad de usar este método. Su existencia en PHP es un error diseñado para evitar un error que mantiene objetos COM ejecutandose por más tiempo que el debido.

Pseudo Métodos para iterar

Estos pseudo métodos solo estan disponibles si com_isenum() devuelve TRUE, en cuyo caso, esconden cualquier método con los mismos nombres que podrían ser proporcionados por el objeto COM. Estos métodos han sido eliminados en PHP 5, y debería usar For Each en su lugar.

COM::All ( void ) : variant

Devuelve un variant que representa un SafeArray con 10 elementos; cada elementos será un variant vacío o null. Esta función Returns a variant representing a SafeArray that has 10 elements; each element will be an empty/null variant. This function was supposed to return an array containing all the elements from the iterator, but was never completed. Do not use.

COM::Next ( void ) : variant

Devuelve un variant representando el siguiente elemento disponible en el iterador, o FALSE cuando no hay más elementos.

COM::Prev ( void ) : variant

Devuelve un variant representando el elemento anterior disponible en el iterador, o FALSE cuando no hay más elementos.

COM::Reset ( void ) : void

Retrocede el iterador hasta el principio.

Ejemplos COM

Ejemplo #1 Ejemplo COM (1)

<?php
// Iniciando word
$word = new COM("word.application") or die("No se puede crear la instancia de Word");
echo 
"Word cargado, versión {$word->Version}\n";

//traerlo al frente
$word->Visible 1;

//abrir un documento vacío
$word->Documents->Add();

//hacer algunas cosas raras
$word->Selection->TypeText("Esto es una prueba...");
$word->Documents[1]->SaveAs("Prueba inutil.doc");

//cerrando word
$word->Quit();

//liberando el objeto
$word null;
?>

Ejemplo #2 Ejemplo COM (2)

<?php

$conn 
= new COM("ADODB.Connection") or die("No se puede iniciar ADO");
$conn->Open("Provider=SQLOLEDB; Data Source=localhost;
Initial Catalog=database; User ID=user; Password=password"
);

$rs $conn->Execute("SELECT * FROM sometable");    // Registros

$num_columns $rs->Fields->Count();
echo 
$num_columns "\n";

for (
$i=0$i $num_columns$i++) {
    
$fld[$i] = $rs->Fields($i);
}

$rowcount 0;
while (!
$rs->EOF) {
    for (
$i=0$i $num_columns$i++) {
        echo 
$fld[$i]->value "\t";
    }
    echo 
"\n";
    
$rowcount++;            // incrementa rowcount
    
$rs->MoveNext();
}

$rs->Close();
$conn->Close();

$rs null;
$conn null;

?>