فصل 3. Zend_Config
السابق |  | التالي

## فصل 3. Zend_Config

## 3.1. مقدمة

تم تصميم `Zend_Config` لتسهل استخدام بيانات الـ configuration الخاصة بتطبيقات الويب , حيث توفر واجهة استخدام تعتمد على اسم الـ property لقرائة المعلومات الخاصة بالـ configuration و ذلك من اكثر من وسيلة حفظ بيانات هرمية. حالياً توفر `Zend_Config` مجموعة من الـ class التى تساعد فى قرائة معلومات الـ configuration المحفوظة فى ملفات نصية و هى : `Zend_Config_Array`, `Zend_Config_Ini`, و `Zend_Config_Xml`.

تدعم `Zend_Config` نظام وراثة احادى و الذى يسمح للبيانات الخاصة بالـ configuration ان تورث من قسم بيانات configorations الى اخر, إذاً يدعم `Zend_Config` النظام الشجرى فى الوراثة و ذلك بدون قيد على طول الفروع, و كل فرع ابن يرث من اب واحد فقط.

داخليا تقوم `Zend_Config` بتطبيق interfaces و هى Countable و Iteratore لتوفر وصول اسهل الى البيانات. يتم توفير البيانات لـ `Zend_Config` على هيئة associative array و التى من الممكن ان تكون متعددة الأبعاد. class مساعد (مثل `Zend_Config_Ini`) هو من يوفر هذه الـ array لـ `Zend_Config` لكن هذا ليس اجباريا.

| ملاحظة
تسمح `Zend_Config` بعمل تغييرات فى بيانات الـ configuration التى تم تحميلها الى الذاكرة , و لكنها لا توفر امكانية حفظ هذه البيانات فى اى من وسائط حفظ البيانات , الأدوات التى تقوم بإنشاء و تعديل بيانات الـ configuration و حفظها فى وسائط حفظ بيانات هى خارج نطاق إطار عمل Zend , لكن يوجد العديد من الحلول مفتوحة المصدر لإنشاء و تعديل بيانات الـ configuration و حفظها فى وسائط حفظ بيانات مختلفة و يمكنك الأستعانة بأى منها.

مثال 3.1. تحميل بيانات الـ Configuration من ملف INI

فى المثال التالى سنقوم بتحميل بيانات الـ configuration من ملف INI و ذلك بإستخدام `Zend_Config_Ini`:

    <?php
    require_once 'Zend/Config.php';
    require_once 'Zend/Config/Ini.php';
    $config = new Zend_Config(Zend_Config_Ini::load('/path/to/config.ini', 'production'));
    ?>

الأن بيانات الـ configuration متوفرة و يمكن استخدامها من خلال الكائن المحفوظ فى `config$` , فلنفترض ان بيانات الـ configuration كانت تحتوى على معلومات الأتصال بقاعدة بيانات و هذه المعلومات كانت مسجلة فى ملف الـ INI بهذا الشكل :

    [production]
    database.type     = pdo_mysql
    database.host     = db.example.com
    database.username = dbuser
    database.password = secret
    database.name     = dbname

سيمكنك إنشاء إتصال مع قاعدة البيانات عن طريق :

    <?php
    $myApplicationObject->databaseConnect($config->database->type,
                                          $config->database->host,
                                          $config->database->username,
                                          $config->database->password,
                                          $config->database->name);
    ?>

كما رأيت فى المثال بالأعلى , يمكنك الوصول الى بيانات الـ configuration بإستخدام نفس طريقة قرائة قيمة حقل "preperty" من كائن "object" .

يمكنك إنشاء نسختك الخاصة من `Zend_Config` بسهولة لتضيف ميزات جديدة تحتاج إلبها, فى المثال التالى قمنا بإنشاء نسختنا الجديدة عن طريق الوراثة من `Zend_Config` و إنشاء method جديد بإسم `()dump` ليقوم بطباعة البيانات المحفوظة فى الكائن :

    <?php
    class MyConfig extends Zend_Config
    {
        protected $_indent;

        public function dump()
        {
            $this->_indent = 0;
            echo "<pre>\n";
            $this->_dumpRecursor($this);
            echo "</pre>";
        }

        protected function _dumpRecursor($config)
        {
            foreach ($config as $key => $value) {
                echo str_repeat("    ", $this->_indent) . "$key =>";
                if ($value instanceof Zend_Config) {
                    echo "\n";
                    $this->_indent++;
                    $this->_dumpRecursor($value);
                    $this->_indent--;
                } else {
                    echo " $value\n";
                }
            }
        }
    }

    $config = new MyConfig(Zend_Config_Ini::load('/path/to/config.ini', 'production'));

    $config->dump();
    ?>

إذا استخدمنا البيانات من ملف الـ configuration السابق , سيطبع التالى :

    <pre>
    database =>
        type => pdo_mysql
        host => db.example.com
        username => dbuser
        password => secret
        name => dbname
    </pre>

السابق |  | التالي
2.4. Zend_Cache backends | البداية | 3.2. Zend_Config_Array