Série de conférences ASP (8) Utilisation des collections
Auteur:Eve Cole
Date de mise à jour:2009-05-30 19:59:11
La plupart des objets intégrés ASP prennent en charge les collections. Les collections sont l'endroit où les chaînes, les nombres, les objets et autres valeurs sont stockés. Les collections sont très similaires aux tableaux, sauf que la collection se développe et effectue automatiquement une recherche lorsque les éléments sont stockés ou récupérés. Contrairement aux tableaux, lorsqu'une collection est modifiée, la position des éléments change. Les éléments sont accessibles par leur nom, leur index ou en parcourant tous les éléments de la collection.
Accès aux éléments par nom et index Vous pouvez accéder à des éléments spécifiques d'une collection en utilisant le nom de l'élément. Par exemple, la collection Contents contient toutes les variables stockées dans l'objet Session. Possède également tous les objets créés par Server.CreateObject. Supposons que les informations utilisateur suivantes soient stockées dans l'objet Session :
<%
Session.Contents("Prénom") = "Sam"
Session.Contents("LastName") = "Woo"
Session.Contents("Âge") = 29
%>
Les éléments sont accessibles en utilisant le nom associé à l'élément lorsqu'il a été stocké dans la collection. Par exemple, l'expression suivante renvoie la chaîne « Sam » :
<%= Session.Contents("FirstName") %>
Les éléments sont également accessibles en utilisant l'index ou le numéro associé à l'élément. Par exemple, l'expression suivante récupère les informations stockées dans le deuxième emplacement de stockage de l'objet Session et renvoie « Woo » :
<%= Session.Contents(2) %>
Les collections ASP sont numérotées à partir de 1. Lorsque des éléments sont ajoutés ou supprimés de la collection, l'index associé à l'élément change. On ne peut donc pas supposer que l’indice de l’élément reste inchangé. Comme cela sera expliqué dans les rubriques suivantes, l'accès à l'aide d'index est généralement utilisé pour parcourir une collection ou pour accéder aux éléments d'une collection en lecture seule.
Les projets sont accessibles en utilisant leurs noms abrégés. ASP recherche les collections associées aux objets dans un ordre spécifique. Si un élément d'un nom spécifique n'apparaît qu'une seule fois dans une collection d'objets, vous pouvez supprimer le nom de la collection :
<%= Session("Prénom") %>
Lors de l'accès à des éléments stockés dans des objets Application ou Session, il est généralement prudent d'éliminer le nom de la collection. Toutefois, pour les objets Request, il est préférable de spécifier le nom de la collection, car celle-ci est susceptible de contenir des noms en double.
Parcourir une collection Parcourez tous les éléments d'une collection pour en savoir plus sur les éléments stockés dans la collection ou pour modifier des éléments. Lors du parcours d’une collection, un nom de collection doit être fourni. Par exemple, vous pouvez utiliser l'instruction For...Each dans VBScript pour accéder aux éléments stockés dans un objet Session :
<%
'Déclarez une variable compteur.
Dim. article
'Pour chaque élément de la collection, affichez sa valeur.
Pour chaque élément de Session.Contents
Réponse.Écriture Session.Contents(Item) & "<BR>"
Suivant
%>
Vous pouvez utiliser l'instruction For...Next dans VBScript pour parcourir une collection. Par exemple, pour répertorier les trois éléments stockés dans la session dans l'exemple ci-dessus, vous utiliserez l'instruction suivante.
<%
'Déclarez une variable compteur.
Dim. article
'Répétez la boucle jusqu'à ce que la valeur du compteur soit égale à 3.
Pour article = 1 à 3
Réponse.Écriture Session.Contents(Item) & "<BR>"
Suivant
%>
Étant donné que le nombre d'éléments stockés dans une collection n'est généralement pas connu, ASP prend en charge la propriété Count des collections, qui renvoie le nombre d'éléments dans la collection. Vous pouvez utiliser la propriété Count pour spécifier la valeur finale du compteur.
<%
'Déclarez une variable compteur.
Dim. article
'Répétez cette boucle jusqu'à ce que le compteur soit égal au nombre d'éléments
'dans la collection.
Pour Item = 1 à Session.Contents.Count
Réponse.Écriture Session.Contents(Item) & "<BR>"
Suivant
%>
Vous pouvez utiliser l'instruction for dans un script pour parcourir une collection. Lorsque vous utilisez la propriété Count dans une instruction JScript for, afin d'obtenir de meilleurs résultats, vous devez attribuer la valeur Count à une variable locale et utiliser cette variable pour définir la valeur finale du compteur. De cette façon, le moteur de script n’a pas besoin de rechercher la valeur de Count à chaque fois qu’il effectue une boucle. L'exemple suivant illustre cette technique :
<%
article var, numitems ;
numitems = Session.Contents.Count;
pour (élément = 1 ; élément <= numitems ; élément++) {
Réponse.Write(Session.Contents(item) + "<BR>")
}
%>
Microsoft JScript 3.0 a introduit l'objet Enumerator. Vous pouvez utiliser cet objet pour parcourir les collections ASP. La méthode atEnd indique s'il existe encore des éléments dans la collection. La méthode moveNext passe à l’élément suivant de la collection.
<%
// Crée un objet Enumérateur
var mycoll = new Enumerator (Session.Contents);
//Parcourir la collection et afficher chaque élément
tandis que (!mycoll.atEnd()) {
var x = moncoll.item();
Réponse.Write(Session.Contents(x) + "<BR>");
moncoll.moveNext();
}
%>
Le script qui parcourt une collection de sous-clés intègre les valeurs pertinentes dans un seul cookie pour réduire le nombre de cookies envoyés entre le navigateur et le serveur Web. Par conséquent, la collection Cookies d’objets Request et Response peut avoir plusieurs valeurs dans un seul élément. Ces sous-éléments ou sous-mots-clés sont accessibles individuellement. Seules les collections Request.Cookies et Response.Cookies prennent en charge les sous-clés (Subkeys). Request.Cookies prend uniquement en charge les opérations de lecture ; Response.Cookies prend uniquement en charge les opérations d'écriture.
Vous pouvez énumérer tous les cookies de la collection Request.Cookie et toutes les sous-clés (Sous-clés) du Cookie. Cependant, parcourir les sous-clés d'un cookie sans sous-clés ne produira aucun résultat. Vous pouvez éviter cela en utilisant la syntaxe .HasKeys pour vérifier d'abord si le cookie contient des sous-clés. L'exemple ci-dessous illustre cette technique.
<%
'Déclarer les variables du compteur
Dim Cookie, sous-clé
'Affichez toute la collection de cookies.
Pour chaque cookie dans Request.Cookies
Réponse.Écrire le cookie & "<BR>"
Si Request.Cookies(Cookie).HasKeys Alors
'Afficher les sous-clés
Pour chaque sous-clé dans Request.Cookies(Cookie)
Response.Write Sous-clé & "=" & Request.Cookies(Cookie)(Sous-clé) & "<BR>"
Suivant
Autre
Response.Write "Aucune sous-clé dans ce cookie <BR>"
Fin si
Suivant
%>
Itérer sur une collection d'objets
Les collections de sessions et d'applications peuvent contenir des variables quantitatives ou des instances d'objet. La collection Contents contient des variables de quantité et des instances d'objet générées en appelant Server.CreateObject. La collection StaticObjects contient les objets créés à l'aide de l'élément HTML <OBJECT> dans le fichier Global.asa.
Lors d'une itération sur une collection contenant un objet, vous pouvez accéder à l'identifiant de l'objet ou aux méthodes et propriétés de l'objet. Par exemple, supposons que votre application utilise un certain nombre d'objets pour créer des comptes d'utilisateurs et que chaque objet dispose d'une méthode d'initialisation. Vous pouvez parcourir la collection StaticObjects pour appeler chaque méthode d'initialisation :
<%
Pour chaque objet dans Session.StaticObjects
Session.StaticObjects(Object).InitializeUser
Suivant
%>
En quoi les collections ASP sont-elles différentes ?
Bien que les collections ASP abordées dans cette rubrique soient très similaires aux objets Collection de Visual Basic, il existe quelques différences. Les collections ASP prennent en charge la propriété Count et la méthode Item, mais pas les méthodes Add et Remove.