|
|
Zend Framework 2 Documentation (Manual) | |
|
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