1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
2024-11-09 23:18:42 +03:00

188 lines
7.6 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2d8559c6c0c10f677080b636bd67e54efdc2cf0a Maintainer: malferov Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="reflectionclass.newlazyghost" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>ReflectionClass::newLazyGhost</refname>
<refpurpose>Создаёт новый экземпляр ленивого призрака</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis role="ReflectionClass">
<modifier>public</modifier> <type>object</type> <methodname>ReflectionClass::newLazyGhost</methodname>
<methodparam><type>callable</type><parameter>initializer</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<simpara>
Метод создаёт новый ленивый экземпляр-призрак класса и прикрепляет
к экземпляру ленивого призрака инициализатор <parameter>initializer</parameter>. Конструктор класса не вызывается,
и свойствам не устанавливаются их значения по умолчанию. Однако инициализатор
<parameter>initializer</parameter> автоматически вызывается и инициализирует объект
при первом наблюдении за объектом или первой модификации объекта.
Смотрите описания, которые содержатся в секциях
«<link linkend="language.oop5.lazy-objects.initialization-triggers">Триггеры инициализации</link>»
и «<link linkend="language.oop5.lazy-objects.initialization-sequence">Последовательность инициализации</link>».
</simpara>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>initializer</parameter></term>
<listitem>
<simpara>
Инициализатор — callback-функция со следующей сигнатурой:
</simpara>
<para>
<methodsynopsis>
<type>void</type><methodname><replaceable>initializer</replaceable></methodname>
<methodparam><type>object</type><parameter>object</parameter></methodparam>
</methodsynopsis>
<variablelist>
<varlistentry>
<term><parameter>object</parameter></term>
<listitem>
<simpara>
Параметр <parameter>object</parameter> принимает объект инициализации. На этом этапе
объект перестаёт быть ленивым, а обращение к объекту не запускает
повторную инициализацию.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<simpara>
Функция обратного вызова <parameter>initializer</parameter> должна возвращать &null;
или не возвращать никакого значения.
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="reflectionclass.newlazyghost.parameters.options">
<term><parameter>options</parameter></term>
<listitem>
<para>
Параметр <parameter>options</parameter> принимает комбинацию следующих
флагов:
<variablelist>
<varlistentry>
<term>
<constant>ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE</constant>
</term>
<listitem>
<simpara>
По умолчанию сериализация ленивого объекта запускает его
инициализацию. Установка этого флага предотвращает инициализацию и разрешает
сериализовать ленивые объекты без инициализации.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
Метод возвращает экземпляр ленивого призрака. Метод возвращает стандартный, а не ленивый экземпляр,
если у объекта нет свойств или все свойства объекта статические или виртуальные.
Смотрите также описание, которое содержит секция
«<link linkend="language.oop5.lazy-objects.lifecycle">Жизненный цикл ленивых объектов</link>».
</simpara>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<simpara>
Метод выбросит ошибку <classname>Error</classname>, если класс окажется внутренним или расширяет
внутренний класс, если только это не класс <classname>stdClass</classname>.
</simpara>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Базовый пример создания нового экземпляра ленивого призрака</title>
<programlisting role="php">
<![CDATA[
<?php
class Example
{
public function __construct(public int $prop)
{
echo __METHOD__, "\n";
}
}
$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyGhost(function (Example $object) {
$object->__construct(1);
});
var_dump($object);
var_dump($object instanceof Example);
// Запускает инициализацию и получает свойство после этого
var_dump($object->prop);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
lazy ghost object(Example)#3 (0) {
["prop"]=>
uninitialized(int)
}
bool(true)
Example::__construct
int(1)
]]>
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><link linkend="language.oop5.lazy-objects">Ленивые объекты</link></member>
<member><methodname>ReflectionClass::newLazyProxy</methodname></member>
<member><methodname>ReflectionClass::newInstanceWithoutConstructor</methodname></member>
<member><methodname>ReflectionClass::resetAsLazyGhost</methodname></member>
<member><methodname>ReflectionClass::markLazyObjectAsInitialized</methodname></member>
<member><methodname>ReflectionClass::initializeLazyObject</methodname></member>
<member><methodname>ReflectionClass::isUninitializedLazyObject</methodname></member>
<member><methodname>ReflectionProperty::setRawValueWithoutLazyInitialization</methodname></member>
<member><methodname>ReflectionProperty::skipLazyInitialization</methodname></member>
<member><methodname>ReflectionProperty::isLazy</methodname></member>
</simplelist>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->