<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.config.adapters.ini">
    <title>Zend_Config_Ini</title>

    <para>
        <classname>Zend_Config_Ini</classname> permite aos desenvolvedores armazenar os dados de
        configuração em um formato <acronym>INI</acronym> conhecido e lê-los no aplicativo através
        de uma sintaxe de propriedade de objeto aninhado. O formato <acronym>INI</acronym> é
        especializado em proporcionar tanto a capacidade de ter uma hierarquia de chaves de dados
        de configuração quanto de herança entre as seções de dados de configuração. Hierarquias de
        dados de configuração são suportadas através da separação das chaves com o ponto ou
        caractere de período ("<emphasis>.</emphasis>"). Uma seção pode estender ou herdar de outra
        seção, seguindo o nome da seção, com um caractere dois pontos ("<emphasis>:</emphasis>") e
        o nome da seção a partir do qual os dados devem ser herdados.
    </para>

    <note>
        <title>Analisando o Arquivo INI</title>

        <para>
            <classname>Zend_Config_Ini</classname> utiliza a função <ulink
            url="http://php.net/parse_ini_file"><methodname>parse_ini_file()</methodname></ulink>
            do <acronym>PHP</acronym>. Por favor reveja esta documentação para estar ciente de seus
            comportamentos característicos, que conduzem o <classname>Zend_Config_Ini</classname>,
            tais como os valores especiais "<constant>TRUE</constant>",
            "<constant>FALSE</constant>", "sim", "não", e "<constant>NULL</constant>"
            são manipulados.
        </para>
    </note>

    <note>
        <title>Separador de Chave</title>

        <para>
            Por padrão, o caractere separador de chave é o caractere de período
            ("<emphasis>.</emphasis>"). Isso pode ser alterado, de qualquer modo, alterando a chave
            <property>nestSeparator</property> de <varname>$options</varname> na construção do
            objeto <classname>Zend_Config_Ini</classname>. Por exemplo:
        </para>

        <programlisting language="php"><![CDATA[
$options['nestSeparator'] = ':';
$config = new Zend_Config_Ini('/path/to/config.ini',
                              'staging',
                              $options);
]]></programlisting>
    </note>

    <example id="zend.config.adapters.ini.example.using">
        <title>Usando o Zend_Config_Ini</title>

        <para>
            Este exemplo ilustra uma utilização básica de <classname>Zend_Config_Ini</classname>
            para carregar dados de configuração de um arquivo <acronym>INI</acronym>. Neste
            exemplo, existem dados de configuração, tanto para um sistema de produção como para um
            sistema de testes. Pois os dados de configuração de um sistema de testes são muito
            semelhantes aos de produção, a seção de testes herda da seção de produção. Neste caso,
            a decisão é arbitrária e poderia ter sido escrita de modo inverso, com a seção de
            produção herdando da seção de testes, embora isso possa não ser o caso em situações
            mais complexas. Suponha-se, então, que os dados de configuração a seguir estão
            contidos em <filename>/path/to/config.ini</filename>:
        </para>

        <programlisting language="ini"><![CDATA[
; Dados de configuração da seção de produção
[production]
webhost                  = www.example.com
database.adapter         = pdo_mysql
database.params.host     = db.example.com
database.params.username = dbuser
database.params.password = secret
database.params.dbname   = dbname

; Os dados de configuração da seção de testes são herdados
; da produção e substitui os valores conforme necessário
[staging : production]
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret
]]></programlisting>

        <para>
            Em seguida, suponha que o desenvolvedor do aplicativo necessite dos dados de
            configuração de testes do arquivo <acronym>INI</acronym>. É o simples caso de carregar
            esses dados especificando o arquivo <acronym>INI</acronym> e a seção de testes:
        </para>

        <programlisting language="php"><![CDATA[
$config = new Zend_Config_Ini('/path/to/config.ini', 'staging');

echo $config->database->params->host;   // imprime "dev.example.com"
echo $config->database->params->dbname; // imprime "dbname"
]]></programlisting>
    </example>

    <note>
        <table id="zend.config.adapters.ini.table">
            <title>Parâmetros do Construtor Zend_Config_Ini</title>

            <tgroup cols="2">
                <thead>
                    <row>
                        <entry>Parâmetro</entry>
                        <entry>Notas</entry>
                    </row>
                </thead>

                <tbody>
                    <row>
                        <entry><varname>$filename</varname></entry>
                        <entry>O arquivo <acronym>INI</acronym> a ser carregado.</entry>
                    </row>

                    <row>
                        <entry><varname>$section</varname></entry>

                        <entry>A [seção] no arquivo <acronym>INI</acronym> que está sendo carregado.
                            Definir este parâmetro como <constant>NULL</constant> irá carregar todas
                            as seções. Alternativamente, uma matriz de nomes de seção pode ser
                            fornecida para carregar várias seções.
                        </entry>
                    </row>

                    <row>
                        <entry>
                            <varname>$options</varname> (padrão <constant>FALSE</constant>)
                        </entry>

                        <entry>
                            Matriz de opções. As seguintes chaves são suportadas:

                            <itemizedlist>
                                <listitem>
                                    <para>
                                        <emphasis><property>allowModifications</property></emphasis>:
                                        Defina como <constant>TRUE</constant> para permitir a
                                        alteração subsequente dos dados de configuração carregados
                                        na memória. O padrão é <constant>NULL</constant>
                                    </para>
                                </listitem>

                                <listitem>
                                    <para>
                                        <emphasis><property>nestSeparator</property></emphasis>:
                                        Define o caractere a ser usado como separador de
                                        aninhamento. O padrão é "."
                                    </para>
                                </listitem>
                            </itemizedlist>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </note>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
