Zend_Config-TheoryOfOperation.xml 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.theory_of_operation">
  5. <title>Teoria de Operação</title>
  6. <para>
  7. Dados de configuração são disponibilizados para o construtor
  8. <classname>Zend_Config</classname> através de uma matriz associativa, que pode ser
  9. multi-dimensional, a fim organizar os dados do geral ao específico. Classes adaptadoras
  10. específicas adaptam os dados de configuração armazenados para produzir uma matriz
  11. associativa para o construtor <classname>Zend_Config</classname>. Scripts do usuário
  12. poderão fornecer matrizes diretamente para o construtor <classname>Zend_Config</classname>,
  13. sem usar uma classe adaptadora, visto que pode ser conveniente em determinadas situações.
  14. </para>
  15. <para>
  16. Cada dado de configuração de cada valor da matriz torna-se uma propriedade do objeto
  17. <classname>Zend_Config</classname>. A chave é usada como o nome da propriedade. Se um valor
  18. é também uma matriz, então a propriedade do objeto resultante é criada como um novo objeto
  19. <classname>Zend_Config</classname>, carregado com os dados da matriz. Isso ocorre
  20. recursivamente, tal como uma hierarquia de dados de configuração podendo ser criados com
  21. qualquer número de níveis.
  22. </para>
  23. <para>
  24. <classname>Zend_Config</classname> implementa as interfaces <emphasis>Countable</emphasis>
  25. e <emphasis>Iterator</emphasis>, a fim de facilitar o acesso simplificado aos dados de
  26. configuração. Assim, pode-se usar a função
  27. <ulink url="http://php.net/count"><methodname>count()</methodname></ulink>
  28. e construtores do <acronym>PHP</acronym> como
  29. <ulink url="http://php.net/foreach"><emphasis>foreach</emphasis></ulink>
  30. com os objetos <classname>Zend_Config</classname>.
  31. </para>
  32. <para>
  33. Por padrão, os dados de configuração disponibilizados através de
  34. <classname>Zend_Config</classname> são somente leitura, e uma atribuição (por exemplo,
  35. <command>$config->database->host = 'example.com';</command>) resulta em uma exceção. Esse
  36. comportamento padrão pode ser anulado através do construtor, no entanto, permitindo apenas
  37. a modificação dos valores dos dados. Além disso, quando as modificações são permitidas,
  38. <classname>Zend_Config</classname> suporta a desativação dos valores (ou seja,
  39. <methodname>unset($config->database->host)</methodname>). O método
  40. <methodname>readOnly()</methodname> pode ser usado para determinar se as modificações para
  41. um determinado objeto <classname>Zend_Config</classname> são permitidas e o método
  42. <methodname>setReadOnly()</methodname> pode ser usado para interromper quaisquer alterações
  43. posteriores a um objeto <classname>Zend_Config</classname> que foi criado
  44. permitindo modificações.
  45. </para>
  46. <note>
  47. <para>
  48. É importante não confundir alterações em memória com dados de configuração salvos em
  49. mídia específica de armazenamento. Ferramentas para criar e modificar dados de
  50. configuração em diversas mídia de armazenamento estão fora do escopo em relação ao
  51. <classname>Zend_Config</classname>. Soluções de código aberto de terceiros estão
  52. prontamente disponíveis para esta finalidade.
  53. </para>
  54. </note>
  55. <para>
  56. Classes adaptadoras herdam da classe <classname>Zend_Config</classname> visto que utilizam
  57. a sua funcionalidade.
  58. </para>
  59. <para>
  60. A família de classes <classname>Zend_Config</classname> permite que os dados de
  61. configuração sejam organizados em seções. Os objetos adaptadores
  62. <classname>Zend_Config</classname> podem ser carregados com uma única seção especificada,
  63. várias seções especificadas, ou todas as seções (se nenhum for especificado).
  64. </para>
  65. <para>
  66. Classes adaptadoras <classname>Zend_Config</classname> suportam um modelo de herança única
  67. que permite que dados de configuração sejam herdados de uma seção de dados de configuração
  68. para outra. Isso é oferecido de forma a reduzir ou eliminar a necessidade de duplicação dos
  69. dados de configuração para diferentes fins. Uma seção herdada também pode substituir os
  70. valores que ela herda através de sua seção pai. Como a herança de classe no
  71. <acronym>PHP</acronym>, uma seção pode herdar de uma seção pai, que pode herdar de uma
  72. seção avó, e assim por diante, mas a herança múltipla (ou seja, seção C herdando
  73. diretamente das seções pais A e B) não é suportada.
  74. </para>
  75. <para>
  76. Se você tem dois objetos <classname>Zend_Config</classname>, você pode juntá-los em um
  77. único objeto usando a função <methodname>merge()</methodname>. Por exemplo, dados
  78. <varname>$config</varname> e <varname>$localConfig</varname>, você poderá unificar os
  79. dados de <varname>$localConfig</varname> para <varname>$config</varname> usando
  80. <command>$config->merge($localConfig);</command>. Os itens em
  81. <varname>$localConfig</varname> serão substituídos por quaisquer itens
  82. com mesmo nome em <varname>$config</varname>.
  83. </para>
  84. <note>
  85. <para>
  86. O objeto <classname>Zend_Config</classname> que está executando a fusão deve ter sido
  87. construído permitindo modificações, passando <constant>TRUE</constant> como o segundo
  88. parâmetro do construtor. O método <methodname>setReadOnly()</methodname> pode então ser
  89. usado para impedir quaisquer alterações posteriores, após a fusão estiver completa.
  90. </para>
  91. </note>
  92. </sect1>
  93. <!--
  94. vim:se ts=4 sw=4 et:
  95. -->