Establecer y obtener valores de propiedades

En los siguientes ejemplos se asume que $compañía es la raíz de un árbol de objetos de datos creados desde el esquema y el documento de ejemplo mostrado arriba.

Ejemplo #1 Acceso mediante el nombre de la propiedad

Se puede acceder a las propiedades de los objetos de datos usando la sintaxis de acceso de la propiedad del objeto. Lo siguiente esteblece el nombre de la compañía a 'Acme'.

<?php
$compañía
->nombre 'Acme';
?>

Ejemplo #2 Acceso mediante el nombre de la propiedad como índice de array

También se puede acceder a las propiedades usando la sintaxis de array asociativo. La forma más sencilla utiliza el nombre de la propiedad como índice del array. Por ejemplo, lo siguiente establece el nombre de la compañía y obtiene el empleadoDelMes.

<?php
$compañía
['nombre'] = 'UltraCorp';
$edm $compañía['empleadoDelMes'];
?>

Ejemplo #3 Iteración sobre objetos de datos

Se pueden recorrer las propiedades de un objeto de datos usando foreach. Lo siguiente recorre las propiedades del empleado del mes.

<?php
  $edm 
$compañía->empleadoDelMes;
  foreach (
$edm as $nombre => $valor) {
      echo 
"$nombre$valor\n";
  }
?>

lo que imprimirá:

nombre: Jane Doe
NS: E0003

La propiedad 'director' no se muestra porque no ha sido establecida.

Ejemplo #4 Acceso a propiedades polievaluadas mediante el nombre

Se puede acceder a las propiedaes polievaluadas de un objeto de datos usando la sintaxis de nombre de la propiedad del objeto. Lo siguiente obtiene la lista de departamentos.

<?php
$departamentos 
$compañía->departamentos;
?>

Ejemplo #5 Acceso a elementos de propiedades polievaluadas

Se puede acceder a elementos de propiedades polievaluadas usando la sintaxis de array. Lo siguiente accede al primer departamento de la compañía.

<?php
$dpto_ta 
$compañía->departamentos[0];
?>

Ejemplo #6 Iteración sobre propiedades polievaluadas

Las propiedades polievaluadas también se pueden recorrer usando foreach. Lo siguiente recorre los departamentos de la compañía.

<?php
  
foreach ($compañía->departamentos as $departamento) {
    
// ...
  
}
?>

Cada iteración asignará el siguiente departamento de la lista a la variable $departamento.

Ejemplo #7 Acceso a propiedades encadenadas

Se pueden encadenar referencias a propiedades en una única línea. Lo siguiente establece y obtiene el nombre del primer departamento.

<?php
  $compañía
->departamentos[0]->nombre 'Tecnologías Emergentes';
  
$nombre_dpto $compañía->departamentos[0]->nombre;
?>

Usando la sintaxis de array asociativo, lo anterior es equivalente a

<?php
  $compañía
['departamentos'][0]['nombre'] = 'Tecnologías Emergentes';
  
$nombre_dpto $compañía['departamentos'][0]['nombre'];
?>

En cualquier caso, la variable nombre_dpto es establecida a 'Tecnologías Emergentes'.

Ejemplo #8 Navegación mediante XPath

El índice de un array asociativo puede ser una expresión como la usada con XPath. Las expresiones válidas están definidas por un subconjunto incrementado de XPath.

Están admitidas las dos formas de indexar propiedades polievaluadas. La primera es la sintaxis de array estándar de XPath con el índice comenzando por uno, la segunda es una extensión de SDO para XPath con un índice comenzando por cero. La sintaxis estándar es:

<?php
  $jane_doe 
$compañía["departamentos[1]/empleados[2]"];
?>

y la sintaxis de extensión para XPath de SDO es:

<?php
  $jane_doe 
$compañía["departamentos.0/empleados.1"];
?>

Ambos ejemplos obtienen el segundo empleado del primer departamento.

Ejemplo #9 Consulta mediante XPath

Se puede usar XPath para consultar e identificar partes de un objeto de datos basados en datos de instancia. Lo siguiente recupera el director del departamento 'Tecnologías Avanzadas'.

<?php
 $director_ta 

  
$compañía["departamentos[nombre='Tecnologías Avanzadas']/empleados[director=true]"];
?>

Ejemplo #10 Crear objetos de datos hijos

Un objeto de datos puede ser una fábrica para sus objetos de datos hijos. Un objeto de datos hijo es automáticamente parte del grafo de datos. Lo siguiente añade un nuevo empleado al departamento 'Tecnologías Avanzadas'.

<?php
  $dpto_ta 
$compañía["departamentos[nombre='Tecnologías Avanzadas']"];
  
$nuevo_contrato $dpto_ta->createDataObject('empleados');
  
$nuevo_contrato->nombre 'John Johnson';
  
$nuevo_contrato->NS 'E0005';
  
$nuevo_contrato->director false;
?>

Ejemplo #11 Desestablecer una propiedad primitiva

Se pueden usar las funciones isset() y unset() para comprobar y eliminar elementos de un objeto de datos.

Lo siguiente limpia el nombre del primer departamento.

<?php
  
unset($compañía->departamentos[0]->nombre);
?>

Ejemplo #12 Desestablecer un objeto de datos

unset también se puede usar para eliminar un objeto de datos de un árbol. El siguiente ejemplo muestra a John Jones abandonando la compañía.

<?php
  
unset($compañía->departamentos[0]->empleados[0]);
?>

Ejemplo #13 Desestablecer una referencia a un objeto de datos

Lo siguiente elimina el 'empleadoDelMes' de la compañía. Si este fuera una relación de contención, el empleado sería eliminado de la compañía (¡probablemente no sería una buena idea echar al mejor empleado de cada mes!), pero ya que es una referencia de no contención, el empleado al que hace referencia permanecerá en el departamento de la compañía, pero ya no será accesible mediante la propiedad empleadoDelMes.

<?php
  
if (isset($compañía->empleadoDelMes)) {
    unset(
$compañía->empleadoDelMes);
  }
?>

Ejemplo #14 Acceso mediante el índice de propiedad

Se pueden acceder a las propiedades de objetos de datos mediante sus índices de propiedad usando la sintaxis de array. El índice de propiedad es la posición en la que la definición de la propiedad aparece en el modelo (en este caso el esquema xml). Se puede ver en el esquema de arriba que el atributo del nombre de la compañía es la segunda propiedad de la compañía (la interfaz de SDO no hace distinción entre atributos XML y elementos). Lo siguiente establece el nombre de la compañía a 'Acme', con el mismo resultado que en el Acceso mediante el nombre de la propiedad

<?php
  $compañía
[1] = 'Acme';
?>

Usar directamente el índice de esta manera puede ser delicado. Normalmente se debería prefereir la sintaxis de nombre de propiedad, aunque el índice de propiedad puede ser necesario en casos especiales.