1 <sect1 id="zend.config.theory_of_operation">
2 <title>نظرية العمل</title>
4 يتم تمرير بيانات الأعدادات إلى <code>Zend_Config</code> على شكل associative array
5 و التى من الممكن ان تكون متعددة الأبعاد, و من أجل دعم تنظيم البيانات من الشكل العام إلى المحدد,
6 تم توفير adapter classes أو "classes توفيقية" وظيفتها توفيق البيانات المقرؤة من مصادر حفظ البيانات المتعددة
7 و تحويلها إلى associative array من أجل <code>Zend_Config</code>, و يمكن للمبرمج أن يوفر
8 هذه المصفوفة "array" مباشرة إلى <code>Zend_Config</code> بدون استخدام adapter class,
9 و هذا من الممكن ان يحدث فى بعض الحالات الخاصة.
12 يطبق <code>Zend_Config</code> كل من الـ interfaces المسمى
13 <code>Countable</code> و <code>Iterator</code> ليوفر وسائل سهلة للوصل إلى البيانات,
14 حيث سيمكنك إستخدام دالة الـ PHP المسمى
15 <ulink url="http://php.net/count"><code>()count</code></ulink>
16 أو إستخدام <ulink url="http://php.net/foreach"><code>foreach</code></ulink>
17 على كائنات <code>Zend_Config</code> .
20 السلوك الطبيعى لـ <code>Zend_Config</code> يسمح بالقرائة فقط للبيانات , و عملية تعديل لأحد
21 قيم البيانات المحفوظة به مثل
22 ( <code><![CDATA[$config->database->host = 'example.com']]></code>)
23 يتسبب فى إلقاء exception , و يمكن تغيير هذا السلوك من خلال الـ constuctor و ذلك
24 للسماح بتعديل قيم البيانات.
26 <title>لاحظ أن</title>
28 تسمح <code>Zend_Config</code> بعمل تغييرات فى بيانات الـ configuration التى تم تحميلها الى الذاكرة ,
29 و لكنها لا توفر امكانية حفظ هذه البيانات فى اى من وسائط حفظ البيانات , الأدوات التى تقوم بإنشاء و تعديل بيانات الـ
30 configuration و حفظها فى وسائط حفظ بيانات هى خارج نطاق Zend_Config , لكن يوجد العديد من الحلول مفتوحة
31 المصدر لإنشاء و تعديل بيانات الـ configuration و حفظها فى وسائط حفظ بيانات مختلفة و يمكنك الأستعانة بأى منها.
36 الـ adapter classes يرثون من <code>Zend_Config</code> حيث أنهم فقط يعدلون على كيفية أدائه.
39 عائلة <code>Zend_Config</code> توفر أمكانية أن تكون البيانات مرتبة فى أقسام بيانات.
40 و من الممكن أن يتم تحميل الـ adapter objects مع تحديد قسم بيانات واحد, أو أكثر من قسم ,
41 أو كل الأقسام (إن لم يتم تحديد قسم).
44 توفر الـ adapter classes فى <code>Zend_Config</code> امكانية الوراثة الأحادية بين أقسام البيانات
45 , حيث يمكن أن يرث قسم بيانات من قسم بيانات أخر.
47 هذا تم توفيره للتقليل من الحاجة لتكرار بيانات الأعدادات فى الأقسام لأسباب متعددة,
48 و القسم الذى يرث من الممكن أن يغير القيم الموروثة من القسم الأب, و الذى من الممكن أن يكون ورث من
49 قسم جد (أب الأب) و هكذا , لكن الوراثة المتعددة (مثل القسم C يرث مباشرة من الأقسام A و B ) غير مدعومة.