docs(ru): Updated to English revision

git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@349603 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Sergey Panteleev
2020-04-03 04:49:31 +00:00
parent 2f170bd171
commit 4ed43d675b
3 changed files with 274 additions and 167 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 8e00768efc67a12ffec14d5dab06962936f27619 Maintainer: irker Status: ready -->
<!-- EN-Revision: e1438a020bbc755a27f18235a0ea94f3d9d556aa Maintainer: irker Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
@ -16,6 +16,8 @@
<link linkend="object.unset">__unset()</link>,
<link linkend="object.sleep">__sleep()</link>,
<link linkend="object.wakeup">__wakeup()</link>,
<link linkend="object.serialize">__serialize()</link>,
<link linkend="object.unserialize">__unserialize()</link>,
<link linkend="object.tostring">__toString()</link>,
<link linkend="object.invoke">__invoke()</link>,
<link linkend="object.set-state">__set_state()</link>,
@ -41,62 +43,62 @@
</simpara>
</caution>
<sect2 xml:id="language.oop5.magic.sleep">
<title>
<link linkend="object.sleep">__sleep()</link> и
<link linkend="object.wakeup">__wakeup()</link>
</title>
<methodsynopsis xml:id="object.sleep">
<modifier>public</modifier> <type>array</type><methodname>__sleep</methodname>
<void/>
</methodsynopsis>
<methodsynopsis xml:id="object.wakeup">
<type>void</type><methodname>__wakeup</methodname>
<void/>
</methodsynopsis>
<sect2 xml:id="language.oop5.magic.sleep">
<title>
<link linkend="object.sleep">__sleep()</link> и
<link linkend="object.wakeup">__wakeup()</link>
</title>
<methodsynopsis xml:id="object.sleep">
<modifier>public</modifier> <type>array</type><methodname>__sleep</methodname>
<void/>
</methodsynopsis>
<methodsynopsis xml:id="object.wakeup">
<modifier>public</modifier> <type>void</type><methodname>__wakeup</methodname>
<void/>
</methodsynopsis>
<para>
Функция <function>serialize</function> проверяет, присутствует ли в
классе метод с магическим именем <link linkend="object.sleep">__sleep()</link>.
Если это так, то этот метод выполняется до любой операции сериализации. Он может
очистить объект и должен возвращать массив с именами
всех переменных этого объекта, которые должны быть сериализованы.
Если метод ничего не возвращает, то сериализуется &null; и
выдается предупреждение <constant>E_NOTICE</constant>.
</para>
<note>
<para>
Функция <function>serialize</function> проверяет, присутствует ли в вашем
классе метод с магическим именем <link linkend="object.sleep">__sleep()</link>.
Если это так, то этот метод выполняется до любой операции сериализации. Он может
очистить объект и должен возвращать массив с именами
всех переменных этого объекта, которые должны быть сериализованы.
Если метод ничего не возвращает, то сериализуется &null; и
выдается предупреждение <constant>E_NOTICE</constant>.
Недопустимо возвращать в <link linkend="object.sleep">__sleep()</link>
имена закрытых свойств в родительском классе. Это
приведет к ошибке уровня <constant>E_NOTICE</constant>.
Вместо этого вы можете использовать интерфейс
<classname>Serializable</classname>.
</para>
<note>
<para>
Недопустимо возвращать в <link linkend="object.sleep">__sleep()</link>
имена закрытых свойств в родительском классе. Это
приведет к ошибке уровня <constant>E_NOTICE</constant>.
Вместо этого вы можете использовать интерфейс
<classname>Serializable</classname>.
</para>
</note>
<para>
Предполагаемое использование <link linkend="object.sleep">__sleep()</link>
состоит в завершении работы над данными, ждущими обработки или
других подобных задач очистки. Кроме того, этот метод может полезен,
когда есть очень большие объекты, которые
нет необходимости полностью сохранять.
</para>
<para>
С другой стороны, функция <function>unserialize</function> проверяет
наличие метода с магическим именем
<link linkend="object.wakeup">__wakeup()</link>.
Если она имеется, эта функция может восстанавливать любые ресурсы,
которые может иметь объект.
</para>
<para>
Предполагаемое использование <link linkend="object.wakeup">__wakeup()</link>
заключается в восстановлении любых соединений с базой данных,
которые могли быть потеряны во время операции сериализации и
выполнения других операций повторной инициализации.
</para>
<example>
<title>Сериализация и десериализация</title>
<programlisting role="php">
</note>
<para>
Предполагаемое использование <link linkend="object.sleep">__sleep()</link>
состоит в завершении работы над данными, ждущими обработки или
других подобных задач очистки. Кроме того, этот метод может полезен,
когда есть очень большие объекты, которые
нет необходимости полностью сохранять.
</para>
<para>
С другой стороны, функция <function>unserialize</function> проверяет
наличие метода с магическим именем
<link linkend="object.wakeup">__wakeup()</link>.
Если она имеется, эта функция может восстанавливать любые ресурсы,
которые может иметь объект.
</para>
<para>
Предполагаемое использование <link linkend="object.wakeup">__wakeup()</link>
заключается в восстановлении любых соединений с базой данных,
которые могли быть потеряны во время операции сериализации и
выполнения других операций повторной инициализации.
</para>
<example>
<title>Сериализация и десериализация</title>
<programlisting role="php">
<![CDATA[
<?php
class Connection
@ -127,32 +129,131 @@ class Connection
$this->connect();
}
}?>
]]>
</programlisting>
</example>
</sect2>
<sect2 xml:id="language.oop5.magic.serialize">
<title>
<link linkend="object.serialize">__serialize()</link> и
<link linkend="object.unserialize">__unserialize()</link>
</title>
<methodsynopsis xml:id="object.serialize">
<modifier>public</modifier> <type>array</type><methodname>__serialize</methodname>
<void/>
</methodsynopsis>
<methodsynopsis xml:id="object.unserialize">
<modifier>public</modifier> <type>void</type><methodname>__unserialize</methodname>
<methodparam><type>array</type><parameter>data</parameter></methodparam>
</methodsynopsis>
<para>
<function>serialize</function> проверяет, есть ли в классе функция с
магическим именем <link linkend="object.serialize">__serialize()</link>. Если да, функция
выполняется перед любой сериализацией. Она должна создать и вернуть ассоциативный массив пар ключ/значение,
которые представляют сериализованную форму объекта.
Если массив не возвращен, будет выдано <classname>TypeError</classname>.
</para>
<note>
<para>
Если и <link linkend="object.serialize">__serialize()</link> и <link linkend="object.sleep">__sleep()</link> о
пределены в одном и том же объекте, будет вызван только метод <link linkend="object.serialize">__serialize()</link>.
<link linkend="object.sleep">__sleep()</link> будет игнорироваться. Если объект реализует интерфейс <link linkend="class.serializable">Serializable</link>,
метод <literal>serialize()</literal> интерфейса будет игнорироваться, а вместо него будет использован <link linkend="object.serialize">__serialize()</link>.
</para>
</note>
<para>
Предполагаемое использование <link linkend="object.serialize">__serialize()</link> для определения удобного для сериализации
произвольного представления объекта. Элементы массива могут соответствовать свойствам объекта, но это не обязательно.
</para>
<para>
И наоборот, <function>unserialize</function> проверяет
наличие магической функции <link linkend="object.unserialize">__unserialize()</link>.
Если функция присутствует, ей будет передан
восстановленный массив, который был возвращен из <link linkend="object.serialize">__serialize()</link>. Затем
он может восстановить свойства объекта из этого массива соответствующим образом.
</para>
<note>
<para>
Если и <link linkend="object.unserialize">__unserialize()</link> и <link linkend="object.wakeup">__wakeup()</link> о
пределены в одном и том же объекте, только будет вызван только метод <link linkend="object.unserialize">__unserialize()</link>.
<link linkend="object.wakeup">__wakeup()</link> будет игнорироваться.
</para>
</note>
<note>
<para>
Функция доступна с PHP 7.4.0.
</para>
</note>
<example>
<title>Сериализация и десериализация</title>
<programlisting role="php">
<![CDATA[
<?php
class Connection
{
protected $link;
private $dsn, $username, $password;
public function __construct($dsn, $username, $password)
{
$this->dsn = $dsn;
$this->username = $username;
$this->password = $password;
$this->connect();
}
private function connect()
{
$this->link = new PDO($this->dsn, $this->username, $this->password);
}
public function __serialize(): array
{
return [
'dsn' => $this->dsn,
'user' => $this->username,
'pass' => $this->password,
];
}
public function __unserialize(array $data): void
{
$this->dsn = $data['dsn'];
$this->username = $data['user'];
$this->password = $data['pass'];
$this->connect();
}
}?>
]]>
</programlisting>
</example>
</sect2>
<sect2 xml:id="language.oop5.magic.tostring">
<title><link linkend="object.tostring">__toString()</link></title>
<methodsynopsis xml:id="object.tostring">
<modifier>public</modifier> <type>string</type><methodname>__toString</methodname>
<void/>
</methodsynopsis>
<para>
Метод <link linkend="object.tostring">__toString()</link> позволяет классу решать,
как он должен реагировать при преобразовании в
строку. Например, что вывести при выполнении <literal>echo $obj;</literal>. Этот метод
должен возвращать строку, иначе произойдёт фатальная ошибка уровня
<constant>E_RECOVERABLE_ERROR</constant>.
</para>
<warning>
<simpara>
Нельзя выбросить исключение из метода <link linkend="object.tostring">__toString()</link> до PHP 7.4.0. Это приведет к фатальной ошибке.
</simpara>
</warning>
<example>
<title>Простой пример</title>
<programlisting role="php">
<sect2 xml:id="language.oop5.magic.tostring">
<title><link linkend="object.tostring">__toString()</link></title>
<methodsynopsis xml:id="object.tostring">
<modifier>public</modifier> <type>string</type><methodname>__toString</methodname>
<void/>
</methodsynopsis>
<para>
Метод <link linkend="object.tostring">__toString()</link> позволяет классу решать,
как он должен реагировать при преобразовании в
строку. Например, что вывести при выполнении <literal>echo $obj;</literal>. Этот метод
должен возвращать строку, иначе произойдёт фатальная ошибка уровня
<constant>E_RECOVERABLE_ERROR</constant>.
</para>
<warning>
<simpara>
Нельзя выбросить исключение из метода <link linkend="object.tostring">__toString()</link> до PHP 7.4.0. Это приведет к фатальной ошибке.
</simpara>
</warning>
<example>
<title>Простой пример</title>
<programlisting role="php">
<![CDATA[
<?php
// Объявление простого класса
@ -175,9 +276,9 @@ $class = new TestClass('Привет');
echo $class;
?>
]]>
</programlisting>
&example.outputs;
<screen>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Привет
]]>
@ -195,26 +296,26 @@ echo $class;
метода <link linkend="object.tostring">__toString()</link>
вызывает ошибку <constant>E_RECOVERABLE_ERROR</constant>.
</para>
</sect2>
<sect2 xml:id="language.oop5.magic.invoke">
<title><link linkend="object.invoke">__invoke()</link></title>
<methodsynopsis xml:id="object.invoke">
<type>mixed</type><methodname>__invoke</methodname>
<methodparam choice="opt"><parameter>...</parameter></methodparam>
</methodsynopsis>
</sect2>
<sect2 xml:id="language.oop5.magic.invoke">
<title><link linkend="object.invoke">__invoke()</link></title>
<methodsynopsis xml:id="object.invoke">
<type>mixed</type><methodname>__invoke</methodname>
<methodparam choice="opt"><parameter>...</parameter></methodparam>
</methodsynopsis>
<para>
Метод <link linkend="object.invoke">__invoke()</link>
вызывается, когда скрипт пытается выполнить объект как функцию.
</para>
<note>
<para>
Метод <link linkend="object.invoke">__invoke()</link>
вызывается, когда скрипт пытается выполнить объект как функцию.
Данный метод доступен начиная с PHP 5.3.0.
</para>
<note>
<para>
Данный метод доступен начиная с PHP 5.3.0.
</para>
</note>
<example>
<title>Использование <link linkend="object.invoke">__invoke()</link></title>
<programlisting role="php">
</note>
<example>
<title>Использование <link linkend="object.invoke">__invoke()</link></title>
<programlisting role="php">
<![CDATA[
<?php
class CallableClass
@ -229,35 +330,35 @@ $obj(5);
var_dump(is_callable($obj));
?>
]]>
</programlisting>
&example.outputs;
<screen>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
int(5)
bool(true)
]]>
</screen>
</example>
</sect2>
<sect2 xml:id="language.oop5.magic.set-state">
<title><link linkend="object.set-state">__set_state()</link></title>
<methodsynopsis xml:id="object.set-state">
<modifier>static</modifier> <type>object</type><methodname>__set_state</methodname>
<methodparam><type>array</type><parameter>properties</parameter></methodparam>
</methodsynopsis>
<para>
Этот <link linkend="language.oop5.static">статический</link> метод
вызывается для тех классов, которые экспортируются функцией
<function>var_export</function> начиная с PHP 5.1.0.
</para>
<para>
Единственный параметр этого метода является массив, содержащий экспортируемые
свойства в виде <literal>array('property' => value, ...)</literal>.
</para>
<example>
<title>Использование <link linkend="object.set-state">__set_state()</link> (начиная с PHP 5.1.0)</title>
<programlisting role="php">
</sect2>
<sect2 xml:id="language.oop5.magic.set-state">
<title><link linkend="object.set-state">__set_state()</link></title>
<methodsynopsis xml:id="object.set-state">
<modifier>static</modifier> <type>object</type><methodname>__set_state</methodname>
<methodparam><type>array</type><parameter>properties</parameter></methodparam>
</methodsynopsis>
<para>
Этот <link linkend="language.oop5.static">статический</link> метод
вызывается для тех классов, которые экспортируются функцией
<function>var_export</function> начиная с PHP 5.1.0.
</para>
<para>
Единственный параметр этого метода является массив, содержащий экспортируемые
свойства в виде <literal>array('property' => value, ...)</literal>.
</para>
<example>
<title>Использование <link linkend="object.set-state">__set_state()</link> (начиная с PHP 5.1.0)</title>
<programlisting role="php">
<![CDATA[
<?php
@ -287,9 +388,9 @@ var_dump($b);
?>
]]>
</programlisting>
&example.outputs;
<screen>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
object(A)#2 (2) {
["var1"]=>
@ -312,25 +413,25 @@ object(A)#2 (2) {
лежит на разработчике.
</simpara>
</note>
</sect2>
<sect2 xml:id="language.oop5.magic.debuginfo">
<title><link linkend="object.debuginfo">__debugInfo()</link></title>
<methodsynopsis xml:id="object.debuginfo">
<type>array</type><methodname>__debugInfo</methodname>
<void/>
</methodsynopsis>
<para>
Этот метод вызывается функцией <function>var_dump</function>, когда
необходимо вывести список свойств объекта. Если этот метод не определен,
тогда будут выведены все свойства объекта c модификаторами public, protected и private.
</para>
<para>
Этот метод был добавлен в PHP 5.6.0.
</para>
<example>
<title>Использование <link linkend="object.debuginfo">__debugInfo()</link></title>
<programlisting role="php">
</sect2>
<sect2 xml:id="language.oop5.magic.debuginfo">
<title><link linkend="object.debuginfo">__debugInfo()</link></title>
<methodsynopsis xml:id="object.debuginfo">
<type>array</type><methodname>__debugInfo</methodname>
<void/>
</methodsynopsis>
<para>
Этот метод вызывается функцией <function>var_dump</function>, когда
необходимо вывести список свойств объекта. Если этот метод не определен,
тогда будут выведены все свойства объекта c модификаторами public, protected и private.
</para>
<para>
Этот метод был добавлен в PHP 5.6.0.
</para>
<example>
<title>Использование <link linkend="object.debuginfo">__debugInfo()</link></title>
<programlisting role="php">
<![CDATA[
<?php
class C {
@ -350,9 +451,9 @@ class C {
var_dump(new C(42));
?>
]]>
</programlisting>
&example.outputs;
<screen>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
object(C)#1 (1) {
["propSquared"]=>
@ -361,7 +462,7 @@ object(C)#1 (1) {
]]>
</screen>
</example>
</sect2>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file

View File

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 18da52a5352ecfddf316d05a9201e685d9068384 Maintainer: shein Status: ready -->
<!-- EN-Revision: e1438a020bbc755a27f18235a0ea94f3d9d556aa Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<refentry xml:id="function.serialize" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refnamediv>
<refname>serialize</refname>
<refpurpose>Генерирует пригодное для хранения представление переменной</refpurpose>
<refpurpose>Генерирует пригодное для хранения представление переменной</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>serialize</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<methodsynopsis>
<type>string</type><methodname>serialize</methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
</methodsynopsis>
<para>
Генерирует пригодное для хранения представление переменной.
</para>
@ -26,7 +26,7 @@
функцию <function>unserialize</function>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
@ -44,12 +44,14 @@
ссылки будут потеряны.
</para>
<para>
При сериализации объекта PHP пытается вызвать магический метод
При сериализации объекта PHP пытается вызвать магические методы
<link linkend="object.serialize">__serialize()</link> или
<link linkend="object.sleep">__sleep()</link> перед сериализацией.
Это делается для того, чтобы позволить объекту в последний
момент произвести очистку и тому подобные операции перед сериализацией.
Аналогично, когда объект восстанавливается функцией
<function>unserialize</function>, вызывается магический метод <link linkend="object.wakeup">__wakeup()</link>.
<function>unserialize</function>, вызывается магический метод <link linkend="object.unserialize">__unserialize()</link> или
<link linkend="object.wakeup">__wakeup()</link>.
</para>
<note>
<para>
@ -63,7 +65,7 @@
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
@ -77,7 +79,7 @@
базы данных, а не в полях типа CHAR или TEXT.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
@ -107,7 +109,7 @@ if (!odbc_execute($stmt, $sqldata)) {
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
@ -116,8 +118,8 @@ if (!odbc_execute($stmt, $sqldata)) {
сериализовано. Однако, те из них, которые поддерживают эту
возможность, реализуют или интерфейс
<interfacename>Serializable</interfacename>, или
магические методы <link linkend="object.sleep">__sleep()</link>
и <link linkend="object.wakeup">__wakeup()</link>. Если
магические методы <link linkend="object.serialize">__serialize()</link>/<link linkend="object.unserialize">__unserialize()</link>
или <link linkend="object.sleep">__sleep()</link>/<link linkend="object.wakeup">__wakeup()</link>. Если
встроенный класс не удовлетворяет этим требованиям,
он не может быть надежно сериализован.
</para>
@ -136,7 +138,7 @@ if (!odbc_execute($stmt, $sqldata)) {
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
@ -147,10 +149,12 @@ if (!odbc_execute($stmt, $sqldata)) {
<member><link linkend="language.oop5.serialization">Сериализация объектов</link></member>
<member><link linkend="object.sleep">__sleep()</link></member>
<member><link linkend="object.wakeup">__wakeup()</link></member>
<member><link linkend="object.serialize">__serialize()</link></member>
<member><link linkend="object.unserialize">__unserialize()</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d4e3166e8c00cd0bb3468d34e2170306c8cdbc03 Maintainer: shein Status: ready -->
<!-- EN-Revision: e1438a020bbc755a27f18235a0ea94f3d9d556aa Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<refentry xml:id="function.unserialize" xmlns="http://docbook.org/ns/docbook">
@ -52,8 +52,8 @@
</para>
<para>
Если переменная, требующая десериализации, является объектом, то после успешного
восстановления объекта PHP автоматически попытается вызвать магический метод
<link linkend="object.wakeup">__wakeup()</link> (если он существует).
восстановления объекта PHP автоматически попытается вызвать магические метод
<link linkend="object.unserialize">__unserialize()</link> или <link linkend="object.wakeup">__wakeup()</link> (если он существует).
</para>
<para>
<note>
@ -248,6 +248,8 @@ function mycallback($classname)
<member><link linkend="language.oop5.autoload">Автоматическая загрузка классов</link></member>
<member><link linkend="ini.unserialize-callback-func">unserialize_callback_func</link></member>
<member><link linkend="object.wakeup">__wakeup()</link></member>
<member><link linkend="object.serialize">__serialize()</link></member>
<member><link linkend="object.unserialize">__unserialize()</link></member>
</simplelist>
</para>
</refsect1>