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; ?> ]]>