<sect1 id="zend.json.objects">
    <title>Объекты JSON</title>
    <para>
        Когда объекты PHP закодировываются в JSON, все публичные свойства этого
        объекта будут закодированы в объект JSON.
<!--
        When encoding PHP objects as JSON, all public properties of that object
        will be encoded in a JSON object.
-->
    </para>
    <para>
        JSON не поддерживает ссылки на объекты, поэтому следите за тем, чтобы
        не закодировывать объекты с рекурсивными ссылками. Если вы имеете дело
        с рекурсией, то в вызове методов <code>Zend_Json::encode()</code> и
        <code>Zend_Json_Encoder::encode()</code> можно установить второй
        необязательный параметр для проверки на рекурсию; если один и тот же
        объект подвергается сериализации дважды, то будет сгенерировано
        исключение.
<!--
        JSON does not allow object references, so care should be taken not to
        encode objects with recursive references. If you have issues with
        recursion, <code>Zend_Json::encode()</code> and
        <code>Zend_Json_Encoder::encode()</code> allow an optional second
        parameter to check for recursion; if an object is serialized twice, an
        exception will be thrown.
-->
    </para>
    <para>
        Декодирование объектов JSON представляет собой дополнительную сложность,
        так как объекты Javascript скорее соответствуют ассоциативным массивам в
        PHP. Одни советуют передавать идентификатор класса, экземпляр этого
        класса должен быть создан и заполнен парами ключ/значение объекта JSON;
        другие считают, что это может представлять собой серьезную угрозу
        безопасности.
<!--
        Decoding JSON objects poses an additional difficulty, however, since
        Javascript objects correspond most closesly to PHP's associative array.
        Some suggest that a class identifier should be passed, and an object
        instance of that class should be created and populated with the
        key/value pairs of the JSON object; others feel this could pose a
        substantial security risk.
-->
    </para>
    <para>
        По умолчанию <code>Zend_Json</code> будет декодировать объекты JSON как
        ассоциативные массивы. Но если вы хотите получить объект, то можете
        указать это:
<!--
        By default, <code>Zend_Json</code> will decode JSON objects as
        associative arrays. However, if you desire an object returned, you can
        specify this:
-->
    </para>
    <programlisting language="php"><![CDATA[<?php
// Декодировать объект как объект
$phpNative = Zend_Json::decode($encodedValue, Zend_Json::TYPE_OBJECT);
?>]]></programlisting>
    <para>
        Любые объекты, декодированные таким образом, возвращаются как
        объекты <code>StdClass</code> со свойствами, соответствующими парам
        ключ/значение в нотации JSON.
<!--
        Any objects thus decoded are returned as <code>StdClass</code> objects
        with properties corresponding to the key/value pairs in the JSON
        notation.
-->
    </para>
    <para>
        Рекомендацией Zend Framework является то, что разрабочик
        должен сам принимать решение, как декодировать объект JSON. Если
        должен быть создан объект определенного типа, он может быть создан в
        коде разработчика и заполнен значениями, декодированными с помощью
        <code>Zend_Json</code>.
<!--
        The recommendation of Zend Framework is that the individual
        developer should decide how to decode JSON objects. If an object of a
        specified type should be created, it can be created in the developer
        code and populated with the values decoded using <code>Zend_Json</code>.
-->
    </para>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
