Package Home

Zend Framework 2 Documentation (Manual)

PHK Home

File: /_sources/modules/zend.config.theory-of-operation.txt

Size:3228
Storage flags:no_autoload,compress/gzip (40%)

.. _zend.config.theory_of_operation:

Theory of Operation
===================

Configuration data are made accessible to ``Zend\Config\Config``'s constructor with an associative array,
which may be multi-dimensional, so data can be organized from general to specific. Concrete adapter
classes adapt configuration data from storage to produce the associative array for ``Zend\Config\Config``'s
constructor. If needed, user scripts may provide such arrays directly to ``Zend\Config\Config``'s constructor, without using
a reader class.

Each value in the configuration data array becomes a property of the ``Zend\Config\Config`` object. The key is used as the
property name. If a value is itself an array, then the resulting object property is created as a new
``Zend\Config\Config`` object, loaded with the array data. This occurs recursively, such that a hierarchy of
configuration data may be created with any number of levels.

``Zend\Config\Config`` implements the `Countable`_ and `Iterator`_ interfaces in order to facilitate simple
access to configuration data. Thus, ``Zend\Config\Config`` objects support the `count()`_ function and 
*PHP* constructs such as `foreach`_.

By default, configuration data made available through ``Zend\Config\Config`` are read-only, and an assignment
(e.g. ``$config->database->host = 'example.com';``) results in a thrown exception. This default behavior may be
overridden through the constructor, allowing modification of data values. Also, when modifications are
allowed, ``Zend\Config\Config`` supports unsetting of values (i.e. ``unset($config->database->host)``). The
``isReadOnly()`` method can be used to determine if modifications to a given ``Zend\Config\Config`` object are
allowed and the ``setReadOnly()`` method can be used to stop any further modifications to a ``Zend\Config\Config``
object that was created allowing modifications.

.. note::

   **Modifying Config does not save changes**

   It is important not to confuse such in-memory modifications with saving configuration data out to specific
   storage media. Tools for creating and modifying configuration data for various storage media are out of scope
   with respect to ``Zend\Config\Config``. Third-party open source solutions are readily available for the purpose
   of creating and modifying configuration data for various storage media.

If you have two ``Zend\Config\Config`` objects, you can merge them into a single object using the ``merge()``
function. For example, given ``$config`` and ``$localConfig``, you can merge data from ``$localConfig`` to
``$config`` using ``$config->merge($localConfig);``. The items in ``$localConfig`` will override any items with the
same name in ``$config``.

.. note::

   The ``Zend\Config\Config`` object that is performing the merge must have been constructed to allow
   modifications, by passing ``TRUE`` as the second parameter of the constructor. The ``setReadOnly()`` method can
   then be used to prevent any further modifications after the merge is complete.


.. _`Countable`: http://php.net/manual/en/class.countable.php
.. _`Iterator`: http://php.net/manual/en/class.iterator.php
.. _`count()`: http://php.net/count
.. _`foreach`: http://php.net/foreach

For more information about the PHK package format: http://phk.tekwire.net