سلسلة محاضرات ASP (8) استخدام المجموعات
الكاتب:Eve Cole
وقت التحديث:2009-05-30 19:59:11
تدعم معظم كائنات ASP المضمنة المجموعات. المجموعات هي المكان الذي يتم فيه تخزين السلاسل والأرقام والكائنات والقيم الأخرى. تشبه المجموعات المصفوفات إلى حد كبير، فيما عدا أن المجموعة تتوسع تلقائيًا وتبحث عند تخزين العناصر أو استرجاعها. على عكس المصفوفات، عند تعديل مجموعة، سيتم نقل موضع العناصر. يمكن الوصول إلى العناصر من خلال اسمها أو فهرسها أو من خلال المرور عبر كافة العناصر الموجودة في المجموعة.
الوصول إلى العناصر حسب الاسم والفهرس يمكنك الوصول إلى عناصر محددة في مجموعة باستخدام اسم العنصر. على سبيل المثال، تحتوي مجموعة المحتويات على كافة المتغيرات المخزنة في كائن الجلسة. يمتلك أيضًا كافة الكائنات التي تم إنشاؤها بواسطة Server.CreateObject. افترض أنه تم تخزين معلومات المستخدم التالية في كائن الجلسة:
<%
Session.Contents("الاسم الأول") = "سام"
Session.Contents("LastName") = "Woo"
محتويات الجلسة("العمر") = 29
%>
يمكن الوصول إلى العناصر باستخدام الاسم المرتبط بالعنصر عندما تم تخزينه في المجموعة. على سبيل المثال، يقوم التعبير التالي بإرجاع السلسلة "Sam":
<%= Session.Contents("الاسم الأول") %>
يمكن أيضًا الوصول إلى العناصر باستخدام الفهرس أو الرقم المرتبط بالعنصر. على سبيل المثال، يسترد التعبير التالي المعلومات المخزنة في فتحة التخزين الثانية لكائن الجلسة ويعيد "Woo":
<%= محتويات الجلسة(2) %>
يتم ترقيم مجموعات ASP بدءًا من 1. عند إضافة عناصر أو إزالتها من المجموعة، سيتغير الفهرس المرتبط بالعنصر. لذلك لا يمكن الافتراض أن فهرس العنصر لم يتغير. كما سيتم شرحه في المواضيع التالية، يتم استخدام الوصول باستخدام الفهارس بشكل عام لاجتياز مجموعة، أو للوصول إلى العناصر الموجودة في مجموعة للقراءة فقط.
يتم الوصول إلى المشاريع باستخدام أسمائها المختصرة. يبحث ASP في المجموعات المرتبطة بالكائنات بترتيب معين. إذا حدث عنصر يحمل اسمًا محددًا مرة واحدة فقط في مجموعة من الكائنات، فيمكنك حذف اسم المجموعة:
<%= الجلسة("الاسم الأول") %>
عند الوصول إلى العناصر المخزنة في كائنات التطبيق أو الجلسة، فمن الآمن عمومًا حذف اسم المجموعة. ومع ذلك، بالنسبة لكائنات الطلب، فمن الأفضل تحديد اسم المجموعة لأنه من المحتمل أن تحتوي المجموعة على أسماء مكررة.
اجتياز مجموعة قم باجتياز جميع عناصر المجموعة للتعرف على العناصر المخزنة في المجموعة أو لتعديل العناصر. عند اجتياز مجموعة، يجب توفير اسم المجموعة. على سبيل المثال، يمكنك استخدام عبارة For...Each في VBScript للوصول إلى العناصر المخزنة في كائن الجلسة:
<%
'قم بتعريف متغير العداد.
البند خافت
'لكل عنصر في المجموعة، اعرض قيمته.
لكل عنصر في Session.Contents
الاستجابة. كتابة محتويات الجلسة (العنصر) و"<BR>"
التالي
%>
يمكنك استخدام عبارة For...Next في VBScript للتكرار عبر مجموعة. على سبيل المثال، لسرد العناصر الثلاثة المخزنة في الجلسة في المثال أعلاه، يمكنك استخدام العبارة التالية.
<%
'قم بتعريف متغير العداد.
البند خافت
كرر الحلقة حتى تصبح قيمة العداد 3.
للعنصر = 1 إلى 3
الاستجابة. كتابة محتويات الجلسة (العنصر) و"<BR>"
التالي
%>
نظرًا لأن عدد العناصر المخزنة في المجموعة غير معروف بشكل عام، يدعم ASP خاصية عدد المجموعات، والتي ترجع عدد العناصر الموجودة في المجموعة. يمكنك استخدام خاصية Count لتحديد القيمة النهائية للعداد.
<%
'قم بتعريف متغير العداد.
البند خافت
كرر هذه الحلقة حتى يساوي العداد عدد العناصر
"في المجموعة.
بالنسبة للعنصر = 1 إلى Session.Contents.Count
الاستجابة. كتابة محتويات الجلسة (العنصر) و"<BR>"
التالي
%>
يمكنك استخدام عبارة for في برنامج نصي للتنقل عبر مجموعة. عند استخدام خاصية Count في عبارة JScript، لتحقيق نتائج أكبر، يجب عليك تعيين قيمة Count لمتغير محلي واستخدام هذا المتغير لتعيين قيمة العداد النهائية. بهذه الطريقة، لا يحتاج محرك البرنامج النصي إلى البحث عن قيمة Count في كل مرة يتكرر فيها. المثال التالي يوضح هذه التقنية:
<%
عنصر var، numitems؛
numitems = Session.Contents.Count;
for (item = 1; item <= numitems; item++) {
الاستجابة.الكتابة(Session.Contents(العنصر) + "<BR>")
}
%>
قدم Microsoft JScript 3.0 كائن Enumerator. يمكنك استخدام هذا الكائن لاجتياز مجموعات ASP. تشير الطريقة atEnd إلى ما إذا كانت لا تزال هناك عناصر في المجموعة. ينتقل الأسلوب moveNext إلى العنصر التالي في المجموعة.
<%
// قم بإنشاء كائن العداد
var mycoll = new Enumerator(Session.Contents);
// كرر خلال المجموعة واعرض كل عنصر
بينما (!mycoll.atEnd()) {
var x = mycoll.item();
Response.Write(Session.Contents(x) + "<BR>");
mycoll.moveNext();
}
%>
يقوم البرنامج النصي الذي يتكرر من خلال مجموعة من المفاتيح الفرعية بتضمين القيم ذات الصلة في ملف تعريف ارتباط واحد لتقليل عدد ملفات تعريف الارتباط المرسلة بين المتصفح وخادم الويب. لذلك يمكن أن تحتوي مجموعة ملفات تعريف الارتباط لكائنات الطلب والاستجابة على قيم متعددة في عنصر واحد. يمكن الوصول إلى هذه العناصر الفرعية أو الكلمات الرئيسية الفرعية بشكل فردي. تدعم مجموعات Request.Cookies وResponse.Cookies فقط المفاتيح الفرعية (المفاتيح الفرعية). يدعم Request.Cookies عمليات القراءة فقط؛ بينما يدعم Response.Cookies عمليات الكتابة فقط.
يمكنك تعداد كافة ملفات تعريف الارتباط في مجموعة Request.Cookie وجميع المفاتيح الفرعية (المفاتيح الفرعية) في ملف تعريف الارتباط. ومع ذلك، فإن التكرار على المفاتيح الفرعية في ملف تعريف الارتباط بدون مفاتيح فرعية لن يؤدي إلى أية نتائج. يمكنك تجنب ذلك باستخدام بناء جملة .HasKeys للتحقق أولاً مما إذا كان ملف تعريف الارتباط يحتوي على مفاتيح فرعية. يوضح المثال أدناه هذه التقنية.
<%
'الإعلان عن متغيرات العداد
خافت كوكي، المفتاح الفرعي
'عرض مجموعة ملفات تعريف الارتباط بأكملها.
لكل ملف تعريف ارتباط في الطلب.ملفات تعريف الارتباط
الاستجابة.اكتب ملف تعريف الارتباط و"<BR>"
إذا كان Request.Cookies(Cookie).HasKeys إذن
'عرض المفاتيح الفرعية
لكل مفتاح فرعي في Request.Cookies(Cookie)
Response.Write Subkey & "=" & Request.Cookies(Cookie)(Subkey) & "<BR>"
التالي
آخر
Response.اكتب "لا توجد مفاتيح فرعية في ملف تعريف الارتباط هذا <BR>"
نهاية إذا
التالي
%>
التكرار على مجموعة من الكائنات
يمكن أن تحتوي مجموعات الجلسة والتطبيق على متغيرات كمية أو مثيلات كائن. تحتوي مجموعة المحتويات على متغيرات الكمية ومثيلات الكائن التي تم إنشاؤها عن طريق استدعاء Server.CreateObject. تحتوي مجموعة StaticObjects على الكائنات التي تم إنشاؤها باستخدام عنصر HTML <OBJECT> في الملف Global.asa.
عند التكرار على مجموعة تحتوي على كائن، يمكنك الوصول إلى معرف الكائن أو أساليب الكائن وخصائصه. على سبيل المثال، لنفترض أن تطبيقك يستخدم عددًا من الكائنات لإنشاء حسابات مستخدمين، ولكل كائن طريقة تهيئة، ويمكنك التكرار عبر مجموعة StaticObjects لاستدعاء كل طريقة تهيئة:
<%
لكل كائن في Session.StaticObjects
Session.StaticObjects(Object).InitializeUser
التالي
%>
كيف تختلف مجموعات ASP؟
على الرغم من أن مجموعات ASP التي تمت مناقشتها في هذا الموضوع تشبه إلى حد كبير كائنات مجموعة Visual Basic، إلا أن هناك بعض الاختلافات. تدعم مجموعات ASP الخاصية Count وأسلوب العنصر، ولكن ليس أساليب الإضافة والإزالة.