mirror of
https://github.com/php/doc-ru.git
synced 2025-08-16 18:22:04 +00:00
Updated translation and merged review by slimus.
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@315130 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
@ -1,25 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- EN-Revision: 03977edc1f92ef56b1141f05388cf400e3f09fcd Maintainer: irker Status: ready -->
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- EN-Revision: 4f3e16d7854ee82114b8d849731fbd7de57cc627 Maintainer: irker Status: ready -->
|
||||
<!-- Reviewed: yes -->
|
||||
<!-- $Revision$ -->
|
||||
<!-- Reviewed: no -->
|
||||
<sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
|
||||
<sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
|
||||
<title>Магические методы</title>
|
||||
<para>
|
||||
Имена методов
|
||||
<link linkend="language.oop5.decon.constructor"><literal>__construct</literal></link>,
|
||||
<link linkend="language.oop5.decon.destructor"><literal>__destruct</literal></link>,
|
||||
<link linkend="language.oop5.overloading.methods"><literal>__call</literal></link>,
|
||||
<link linkend="language.oop5.overloading.methods"><literal>__callStatic</literal></link>,
|
||||
<link linkend="language.oop5.overloading.members"><literal>__get</literal></link>,
|
||||
<link linkend="language.oop5.overloading.members"><literal>__set</literal></link>,
|
||||
<link linkend="language.oop5.overloading.members"><literal>__isset</literal></link>,
|
||||
<link linkend="language.oop5.overloading.members"><literal>__unset</literal></link>,
|
||||
<link linkend="language.oop5.magic.sleep"><literal>__sleep</literal></link>,
|
||||
<link linkend="language.oop5.magic.sleep"><literal>__wakeup</literal></link>,
|
||||
<link linkend="language.oop5.magic.tostring"><literal>__toString</literal></link>,
|
||||
<link linkend="language.oop5.magic.invoke"><literal>__invoke</literal></link>,
|
||||
<link linkend="language.oop5.magic.set-state"><literal>__set_state</literal></link> и
|
||||
<link linkend="language.oop5.cloning"><literal>__clone</literal></link>
|
||||
<link linkend="language.oop5.decon.constructor">__construct()</link>,
|
||||
<link linkend="language.oop5.decon.destructor">__destruct()</link>,
|
||||
<link linkend="language.oop5.overloading.methods">__call()</link>,
|
||||
<link linkend="language.oop5.overloading.methods">__callStatic()</link>,
|
||||
<link linkend="language.oop5.overloading.members">__get()</link>,
|
||||
<link linkend="language.oop5.overloading.members">__set()</link>,
|
||||
<link linkend="language.oop5.overloading.members">__isset()</link>,
|
||||
<link linkend="language.oop5.overloading.members">__unset()</link>,
|
||||
<link linkend="language.oop5.magic.sleep">__sleep()</link>,
|
||||
<link linkend="language.oop5.magic.sleep">__wakeup()</link>,
|
||||
<link linkend="language.oop5.magic.tostring">__toString()</link>,
|
||||
<link linkend="language.oop5.magic.invoke">__invoke()</link>,
|
||||
<link linkend="language.oop5.magic.set-state">__set_state()</link> и
|
||||
<link linkend="language.oop5.cloning">__clone()</link>
|
||||
зарезервированы для "магических" методов в PHP.
|
||||
Не стоит называть свои методы этими именами, если вы не хотите
|
||||
использовать их "магическую" функциональность.
|
||||
@ -35,41 +35,47 @@
|
||||
</caution>
|
||||
|
||||
<sect2 xml:id="language.oop5.magic.sleep">
|
||||
<title><literal>__sleep</literal> и <literal>__wakeup</literal></title>
|
||||
<title>
|
||||
<link linkend="language.oop5.magic.sleep">__sleep()</link> и
|
||||
<link linkend="language.oop5.magic.sleep">__wakeup()</link>
|
||||
</title>
|
||||
<para>
|
||||
Функция <function>serialize</function> проверяет, присутствует ли в вашем
|
||||
классе метод с "магическим" именем <literal>__sleep</literal>. Если это так,
|
||||
то этот метод выполняется прежде любой операции сериализации. Он может
|
||||
классе метод с "магическим" именем <link linkend="language.oop5.magic.sleep">__sleep()</link>.
|
||||
Если это так, то этот метод выполняется прежде любой операции сериализации. Он может
|
||||
очистить объект и предполагается, что будет возвращен массив с именами
|
||||
всех переменных объекта, который должен быть сериализован.
|
||||
Если метод ничего не возвращает кроме &null;, то это значит, что объект
|
||||
сериализован и выдается предупреждение <constant>E_NOTICE</constant>.
|
||||
</para>
|
||||
<note>
|
||||
<para>
|
||||
Недопустимо возвращать в <literal>__sleep</literal> имена приватных свойств
|
||||
объекта в родительский класс. Это приведет к предупреждению
|
||||
<constant>E_NOTICE</constant>. Вместо этого вы можете использовать интерфейс
|
||||
<classname>Serializable</classname>.
|
||||
</para>
|
||||
<para>
|
||||
Недопустимо возвращать в <link linkend="language.oop5.magic.sleep">__sleep()</link>
|
||||
имена приватных свойств объекта в родительский класс. Это
|
||||
приведет к предупреждению <constant>E_NOTICE</constant>.
|
||||
Вместо этого вы можете использовать интерфейс
|
||||
<classname>Serializable</classname>.
|
||||
</para>
|
||||
</note>
|
||||
<para>
|
||||
Обычно <literal>__sleep</literal> используется для передачи ожидаемых
|
||||
данных или для выполнения обычных задач их очистки. Также, этот метод
|
||||
можно выполнять в тех случаях, когда вы не хотите сохранять очень большие
|
||||
объекты полностью.
|
||||
Рекомендованное использование <link linkend="language.oop5.magic.sleep">__sleep()</link>
|
||||
состоит в завершении работы над данными, ждущими обработки или
|
||||
других подобных задач очистки. Кроме того, этот метод можно
|
||||
выполнять в тех случаях, когда нет необходимости сохранять
|
||||
полностью очень большие объекты.
|
||||
</para>
|
||||
<para>
|
||||
С другой стороны, функция <function>unserialize</function> проверяет
|
||||
наличие метода с "магическим" именем <literal>__wakeup</literal>.
|
||||
наличие метода с "магическим" именем
|
||||
<link linkend="language.oop5.magic.sleep">__wakeup()</link>.
|
||||
Если такой имеется, то он может воссоздать все ресурсы объекта,
|
||||
принадлежавшие ему.
|
||||
</para>
|
||||
<para>
|
||||
Обычно <literal>__wakeup</literal> используется для восстановления
|
||||
любых соединений с базой данных, которые могли быть потеряны во время
|
||||
операции сериализации и выполнения других операций повторной
|
||||
инициализации.
|
||||
Обычно <link linkend="language.oop5.magic.sleep">__wakeup()</link>
|
||||
используется для восстановления любых соединений с базой данных,
|
||||
которые могли быть потеряны во время операции сериализации и
|
||||
выполнения других операций повторной инициализации.
|
||||
</para>
|
||||
<example>
|
||||
<title>Sleep и wakeup</title>
|
||||
@ -113,9 +119,9 @@ class Connection
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="language.oop5.magic.tostring">
|
||||
<title><literal>__toString</literal></title>
|
||||
<title><link linkend="language.oop5.magic.tostring">__toString()</link></title>
|
||||
<para>
|
||||
Метод <literal>__toString</literal> позволяет классу решать
|
||||
Метод <link linkend="language.oop5.magic.tostring">__toString()</link> позволяет классу решать
|
||||
самостоятельно, как он должен реагировать при преобразовании в
|
||||
строку. Например, что напечатает <literal>echo $obj;</literal>. Этот метод
|
||||
должен возвращать строку, иначе выдастся неисправимая ошибка
|
||||
@ -126,7 +132,7 @@ class Connection
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
// Декларирование простого класса
|
||||
// Объявление простого класса
|
||||
class TestClass
|
||||
{
|
||||
public $foo;
|
||||
@ -155,24 +161,24 @@ echo $class;
|
||||
</screen>
|
||||
</example>
|
||||
<para>
|
||||
Ранее, до PHP 5.2.0, метод <literal>__toString</literal> вызывался
|
||||
только непосредственно в сочетании с функциями <function>echo</function>
|
||||
или <function>print</function>.
|
||||
Ранее, до PHP 5.2.0, метод <link linkend="language.oop5.magic.tostring">__toString()</link>
|
||||
вызывался только непосредственно в сочетании с функциями
|
||||
<function>echo</function> или <function>print</function>.
|
||||
Начиная с PHP 5.2.0, он вызывается в любом строчном контексте
|
||||
(например, в <function>printf</function> с модификатором
|
||||
<literal>%s</literal>), но не в контекстах других типов (например,
|
||||
с <literal>%d</literal> модификатором).
|
||||
Начиная с PHP 5.2.0, преобразование объекта в строку при отсутствии
|
||||
метода <literal>__toString</literal> вызывает ошибку
|
||||
<constant>E_RECOVERABLE_ERROR</constant>.
|
||||
метода <link linkend="language.oop5.magic.tostring">__toString()</link>
|
||||
вызывает ошибку <constant>E_RECOVERABLE_ERROR</constant>.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="language.oop5.magic.invoke">
|
||||
<title><literal>__invoke</literal></title>
|
||||
<title><link linkend="language.oop5.magic.invoke">__invoke()</link></title>
|
||||
<para>
|
||||
Метод <literal>__invoke</literal> вызывается, когда скрипты пытается
|
||||
выполнить объект как функцию.
|
||||
Метод <link linkend="language.oop5.magic.invoke">__invoke()</link>
|
||||
вызывается, когда скрипт пытается выполнить объект как функцию.
|
||||
</para>
|
||||
<note>
|
||||
<para>
|
||||
@ -180,7 +186,7 @@ echo $class;
|
||||
</para>
|
||||
</note>
|
||||
<example>
|
||||
<title>Использование <literal>__invoke</literal></title>
|
||||
<title>Использование <link linkend="language.oop5.magic.invoke">__invoke()</link></title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
@ -188,8 +194,8 @@ class CallableClass
|
||||
{
|
||||
public function __invoke($x)
|
||||
{
|
||||
var_dump($x);
|
||||
}
|
||||
var_dump($x);
|
||||
}
|
||||
}
|
||||
$obj = new CallableClass;
|
||||
$obj(5);
|
||||
@ -208,7 +214,7 @@ bool(true)
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="language.oop5.magic.set-state">
|
||||
<title><literal>__set_state</literal></title>
|
||||
<title><link linkend="language.oop5.magic.set-state">__set_state()</link></title>
|
||||
<para>
|
||||
Этот <link linkend="language.oop5.static">статический</link> метод
|
||||
вызывается для тех классов, которые экспортируются функцией
|
||||
@ -219,7 +225,7 @@ bool(true)
|
||||
свойств в виде <literal>array('property' => value, ...)</literal>.
|
||||
</para>
|
||||
<example>
|
||||
<title>Использование <literal>__set_state</literal> (начиная с PHP 5.1.0)</title>
|
||||
<title>Использование <link linkend="language.oop5.magic.set-state">__set_state()</link> (начиная с PHP 5.1.0)</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
|
Reference in New Issue
Block a user