COM
La clase COM
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
stringmodule_name
mixedserver_name
intcodepage
stringtypelib
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 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.
voidCOM::AddRef
Agrega artificialmente una referencia de contador al objeto COM.
No debería tener necesidad de usar este método. Existe como un complemento lógico
al método Release() a continuación.
voidCOM::Release
Remueve artificialmente una referencia de contador al objeto COM.
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 en su lugar.
variantCOM::All
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.
variantCOM::Next
Devuelve un variant representando el siguiente elemento disponible en el
iterador, o &false; cuando no hay más elementos.
variantCOM::Prev
Devuelve un variant representando el elemento anterior disponible
en el iterador, o &false; cuando no hay más elementos.
voidCOM::Reset
Retrocede el iterador hasta el principio.
Ejemplos COM
Ejemplo COM (1)
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 COM (2)
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;
?>
]]>