## Fixe et Récupère les Valeurs des Propriétés

Les exemples suivants présument que $compagnie est la racine d'un arbre d'objets de données créés depuis le schéma et le document montré ci-dessus.

Exemple #1 Accès via les noms de Propriété

Les propriétés des objets de données peuvent être accédées en utilisant la syntaxe d'accès de propriété d'objet. L'exemple fixe le nom de compagnie à "Acme".

`<?php
$company->name = 'Acme';
?>`

Exemple #2 Accès via le nom de la propriété en tant que tableau indexé

Nous pouvons également accéder aux propriétés en utilisant un tableau associatif. La forme la plus simple est d'utiliser le nom de la propriété dans le tableau indexé. Par exemple, ce qui suit définit le nom de la compagnie et récupère l'"employeeOfTheMonth".

`<?php
$company['name'] = 'UltraCorp';
$eotm = $company['employeeOfTheMonth'];
?>`

Exemple #3 Itération d'objet de données

Vous pouvons passer en revue les propriétés d'un objet de données en utilisant l'instruction foreach.

`<?php
$eotm = $company->employeeOfTheMonth;
foreach ($eotm as $name => $value) {
echo "$name: $value\n";
}
?>`

Affichera :

    name: Jane Doe
    SN: E0003

La propriété "manager" n'est pas affichées, car elle n'a pas été spécifiée.

Exemple #4 Accès à une propriété à valeurs multiples par le nom

Les propriétés à valeurs multiples d'un objet de données peuvent être accédées en utilisant la syntaxe des noms de propriétés de l'objet. Ce qui suit récupère la liste des départements.

`<?php
$departments = $company->departments;
?>`

Exemple #5 Accès aux éléments à valeurs multiples

Nous pouvons accéder aux éléments individuels des propriétés à valeurs multiples en utilisant la syntaxe des tableaux. Ce qui suit permet d'accéder au premier département de la compagnie.

`<?php
$ad_tech_dept = $company->departments[0];
?>`

Exemple #6 Itération d'une propriété à valeurs multiples

Les propriétés à valeurs multiples peuvent être passées en revue en utilisant l'instruction foreach.

`<?php
foreach ($company->departments as $department) {
// ...
}
?>`

Chaque itération assignera le prochain département de la liste dans la variable $department.

Exemple #7 Accès aux propriétés chaînées

Nous pouvons chaîner les références des propriétés sur une seule ligne. Ce qui suit définit et récupère le nom du premier département.

`<?php
$company->departments[0]->name = 'Emerging Technologies';
$dept_name = $company->departments[0]->name;
?>`

En utilisant la syntaxe des tableaux associatifs, c'est l'équivalent de

`<?php
$company['departments'][0]['name'] = 'Emerging Technologies';
$dept_name = $company['departments'][0]['name'];
?>`

Dans tous les cas, la variable dept_name est définie à "Emerging Technologies".

Exemple #8 Navigation XPath

Le tableau associatif indexé peut être une expression façon XPath. Les expressions valides sont définies par une sous définition d'XPath.

Deux façons d'indexations de propriétés à valeurs multiples sont supportées. La première est la syntaxe de tableau XPath standard dont l'index commence à 0, la seconde est une extension SDO à XPath avec un index qui commence à 0. La syntaxe standard est :

`<?php
$jane_doe = $company["departments[1]/employees[2]"];
?>`

et la syntaxe de l'extension SDO XPath est :

`<?php
$jane_doe = $company["departments.0/employees.1"];
?>`

Les deux exemples ci-dessus récupèrent le second employé du premier département.

Exemple #9 Requête XPath

Nous pouvons utiliser XPath pour effectuer une requête et ainsi identifier des parties d'un objet de données basé sur des données instanciées. Ce qui suit récupère le manager depuis le département "Advanced Technologies".

`<?php
$ad_tech_mgr =
$company["departments[name='Advanced Technologies']/employees[manager=true]"];
?>`

Exemple #10 Création d'objets de données fils

Un objet de données peut être une fraction pour ces objets de données fils. Un objet de données fils est automatiquement une partie des données. Ce qui suit ajoute un nouvel employé au département "Advanced Technologies".

`<?php
$ad_tech_dept = $company["departments[name='Advanced Technologies']"];
$new_hire = $ad_tech_dept->createDataObject('employees');
$new_hire->name = 'John Johnson';
$new_hire->SN = 'E0005';
$new_hire->manager = false;
?>`

Exemple #11 Effacement d'une propriété primitive

Nous pouvons utiliser la fonction isset() et unset() pour tester et effacer des éléments de l'objet de données.

Ce qui suit efface le nom du premier département.

`<?php
unset($company->departments[0]->name);
?>`

Exemple #12 Effacement d'un objet de données

La fonction unset() peut également être utilisée pour effacer un objet de données de l'arbre. L'exemple suivant montre comment John Jones à quitter la compagnie...

`<?php
unset($company->departments[0]->employees[0]);
?>`

Exemple #13 Effacement d'un objet de données référencé

Ce qui suit efface "employeeOfTheMonth" de la compagnie. Si c'est une relation contenue, alors l'employé sera effacé de la compagnie. (probablement pas une bonne idée que d'effacer chaque mois votre meilleur employé !) mais si c'est une relation non-contenue, l'employé référencé restera dans le département de la compagnie, mais ne sera plus accessible via la propriété "employeeOfTheMonth".

`<?php
if (isset($company->employeeOfTheMonth)) {
unset($company->employeeOfTheMonth);
}
?>`

Exemple #14 Accès via l'index de la propriété

Les propriétés de l'objet de données peuvent être accédées via leurs index en utilisant la syntaxe de tableaux. L'index de la propriété est la position dont la propriété apparaît dans le modèle (dans ce cas, le schéma XML). Nous pouvons voir dans le schéma listé ci-dessus que l'attribut du nom de la compagnie est la seconde propriété de la compagnie (l'interface SDO ne fait pas de distinction entre les attributs XML et les éléments). Ce qui suit va définir le nom de la compagnie en "Acme", avec le même résultat que lors de l'accès via le nom de la propriété.

`<?php
$company[1] = 'Acme';
?>`

L'utilisation directe de l'index dans ce cas est fragile. Normalement, la syntaxe reposant sur le nom de la propriété est préférable, mais l'index des propriétés peut être nécessaire dans des cas très spéciaux.