<sect1 id="zend.config.theory_of_operation">
    <title>نظرية العمل</title>
    <para>
        يتم تمرير بيانات الأعدادات إلى <code>Zend_Config</code> على شكل associative array
        و التى من الممكن ان تكون متعددة الأبعاد, و من أجل دعم تنظيم البيانات من الشكل العام إلى المحدد,
        تم توفير adapter classes أو "classes توفيقية" وظيفتها توفيق البيانات المقرؤة من مصادر حفظ البيانات المتعددة
        و تحويلها إلى associative array من أجل <code>Zend_Config</code>, و يمكن للمبرمج أن يوفر
        هذه المصفوفة "array" مباشرة إلى <code>Zend_Config</code> بدون استخدام adapter class,
        و هذا من الممكن ان يحدث فى بعض الحالات الخاصة.
    </para>
    <para>
        يطبق <code>Zend_Config</code> كل من الـ interfaces المسمى
        <code>Countable</code> و <code>Iterator</code> ليوفر وسائل سهلة للوصل إلى البيانات,
        حيث سيمكنك إستخدام دالة الـ PHP المسمى
        <ulink url="http://php.net/count"><code>()count</code></ulink>
        أو إستخدام <ulink url="http://php.net/foreach"><code>foreach</code></ulink>
        على كائنات <code>Zend_Config</code> .
    </para>
    <para>
        السلوك الطبيعى لـ <code>Zend_Config</code> يسمح بالقرائة فقط للبيانات , و عملية تعديل لأحد
        قيم البيانات المحفوظة به مثل
        ( <code><![CDATA[$config->database->host = 'example.com']]></code>)
        يتسبب فى إلقاء exception , و يمكن تغيير هذا السلوك من خلال الـ constuctor و ذلك
        للسماح بتعديل قيم البيانات.
        <note>
            <title>لاحظ أن</title>
            <para>
                تسمح <code>Zend_Config</code> بعمل تغييرات فى بيانات الـ configuration التى تم تحميلها الى الذاكرة ,
                و لكنها لا توفر امكانية حفظ هذه البيانات فى اى من وسائط حفظ البيانات , الأدوات التى تقوم بإنشاء و تعديل بيانات الـ
                configuration     و حفظها فى وسائط حفظ بيانات هى خارج نطاق  Zend_Config , لكن يوجد العديد من الحلول مفتوحة
                المصدر لإنشاء و تعديل بيانات الـ configuration و حفظها فى وسائط حفظ بيانات مختلفة و يمكنك الأستعانة بأى منها.
            </para>
        </note>
    </para>
    <para>
        الـ adapter classes يرثون من <code>Zend_Config</code> حيث أنهم فقط يعدلون على كيفية أدائه.
    </para>
    <para>
        عائلة <code>Zend_Config</code>  توفر أمكانية أن تكون البيانات مرتبة فى أقسام بيانات.
        و من الممكن أن يتم تحميل الـ adapter objects مع تحديد قسم بيانات واحد, أو أكثر من قسم ,
        أو كل الأقسام (إن لم يتم تحديد قسم).
    </para>
    <para>
        توفر الـ adapter classes فى <code>Zend_Config</code> امكانية الوراثة الأحادية بين أقسام البيانات
        , حيث يمكن أن يرث قسم بيانات من قسم بيانات أخر.

        هذا تم توفيره للتقليل من الحاجة لتكرار بيانات الأعدادات فى الأقسام لأسباب متعددة,
        و القسم الذى يرث من الممكن أن يغير القيم الموروثة من القسم الأب, و الذى من الممكن أن يكون ورث من
        قسم جد (أب الأب) و هكذا , لكن الوراثة المتعددة (مثل القسم C يرث مباشرة من الأقسام A و B ) غير مدعومة.
    </para>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
