Ejemplos
PHP Manual

Reflexión sobre Objetos de Datos de Servicio

Los SDOs tienen conocimiento de la estructura en la que fueron creados a representar (el modelo). Por ejemplo, un SDO Compañía crado usando el esqueme XML Compañía de arriba solamente le estaría permitido contener objetos de datos TipoDepartamento, los cuales a su vez sólo pueden contener objetos de datos TipoEmpleado.

A veces es útil poder acceder a la información del modelo en tiempo de ejecución. Por ejemplo, esto podría usarse para generar automáticamente una interfaz de usuario y rellenar un objeto de datos. A la información del modelo se accede usando reflexión.

Ejemplo #1 Reflexión sobre un Objeto de Datos

El siguiente ejemplo muestra cómo se puede usar la reflexión en un objeto de datos Empleado vacío.

<?php
  
// Crear el objeto de datos empleado (p.ej. desde un Servicio de Acceso a Datos de XML)
  
$empleado = ...;
  
$reflexión = new SDO_Model_ReflectionDataObject($empleado);
  print(
$reflexión);
?>

El resultado del ejemplo sería:

object(SDO_Model_ReflectionDataObject)#4 { - ROOT OBJECT - Type { 
ENCompañía:TipoEmpleado[3] { commonj.sdo:String $nombre; 
commonj.sdo:String $NS; commonj.sdo:Boolean $director; } }

Al usar print con SDO_Model_ReflectionDataObject se escribe el modelo del objeto de datos. Se puede observar que el tipo ENCompañía:TipoEmpleado tiene tres propiedades y se pueden ver los nombres de las propiedades junto con sus tipos. Observe que los tipos primitivos están listados como tipos SDO (p.ej. espacio de nombres commonj.sdo, tipo String). Esto es nada más y nada menos que el modelo del SDO, y cuando estos tipos aparecen en una aplicación, pueden ser tratados como sus tipos equivalentes de PHP (p.ej. string y boolean).

Ejemplo #2 Acceder a la información del tipo

Se puede consultar la información del tipo de un objeto de datos usando reflexión. El siguiente ejemplo comprueba el tipo que corresponde a un objetos de datos en lugar de un tipo primitivo y luego itera a través de las propiedades de tipo, escribiendo el nombre de cada propiedad ($tipo y $propiedad son objetos SDO_Model_Type y SDO_Model_Property, respectivamente).

<?php
  
// Crear el objeto de datos empleado (p.ej. desde un Servicio de Acceso a Datos de XML)
    
$empleado = ...;
    
$reflexión = new SDO_Model_ReflectionDataObject($empleado);
    
$tipo $reflexión->getType();
    if (! 
$tipo->isDataType()) {
        foreach (
$tipo->getProperties() as $propiedad) {
            print 
$propiedad->getName() . "\n";
        }
    }
?>

El resultado del ejemplo sería:

nombre
NS
director


Ejemplos
PHP Manual