1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-24 07:22:16 +01:00
Files

179 lines
6.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2d8559c6c0c10f677080b636bd67e54efdc2cf0a Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes -->
<refentry xml:id="reflectionclass.newlazyproxy" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<refnamediv>
<refname>ReflectionClass::newLazyProxy</refname>
<refpurpose>Crear una nueva instancia proxy perezosa</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis role="ReflectionClass">
<modifier>public</modifier> <type>object</type><methodname>ReflectionClass::newLazyProxy</methodname>
<methodparam><type>callable</type><parameter>factory</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<simpara>
Crear una nueva instancia proxy perezosa de la clase, adjuntando la
<parameter>factory</parameter> a la misma. El constructor no es
llamado, y las propiedades no son definidas a su valor por defecto. Cuando se
intenta observar o modificar el estado del proxy por primera vez, la función
fábrica es llamada para proporcionar una instancia real, que es luego adjuntada
al proxy. Después de esto, todas las interacciones posteriores con el proxy son
transmitidas a la instancia real. Ver
<link linkend="language.oop5.lazy-objects.initialization-triggers">disparadores
de inicialización</link> y <link linkend="language.oop5.lazy-objects.initialization-sequence">
secuencia de inicialización</link>.
</simpara>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>factory</parameter></term>
<listitem>
<simpara>
La fábrica es una función de devolución de llamada con la siguiente firma:
</simpara>
<para>
<methodsynopsis>
<type>object</type><methodname><replaceable>factory</replaceable></methodname>
<methodparam><type>object</type><parameter>object</parameter></methodparam>
</methodsynopsis>
<variablelist>
<varlistentry>
<term><parameter>object</parameter></term>
<listitem>
<simpara>
El <parameter>object</parameter> en curso de inicialización. En este punto,
el objeto ya no está marcado como perezoso, y acceder a él no dispara
la inicialización.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<simpara>
La función fábrica debe devolver un objeto, llamado <emphasis>instancia real</emphasis>,
que es luego adjuntado al proxy. Esta instancia real no debe ser perezosa
ni debe ser el proxy mismo. Si la instancia real no tiene la misma clase
que el proxy, la clase del proxy debe ser una subclase de la clase de la
instancia real, sin propiedades adicionales, y no debe sobrescribir los
métodos <methodname>__destruct</methodname> o <methodname>__clone</methodname>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('reflectionclass.newlazyghost.parameters.options')/*)">
<xi:fallback/>
</xi:include>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
Devuelve una instancia proxy perezosa. Si el objeto no tiene propiedades, o si
todas sus propiedades son estáticas o virtuales, se devuelve una instancia normal
(no perezosa). Ver también
<link linkend="language.oop5.lazy-objects.lifecycle">Ciclo de vida de los objetos
perezosos</link>.
</simpara>
</refsect1>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('reflectionclass.newlazyghost')/db:refsect1[@role='errors'])">
<xi:fallback/>
</xi:include>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Uso básico</title>
<programlisting role="php">
<![CDATA[
<?php
class Example {
public function __construct(public int $prop) {
echo __METHOD__, "\n";
}
}
$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyProxy(function (Example $object) {
$realInstance = new Example(1);
return $realInstance;
});
var_dump($object);
var_dump($object instanceof Example);
// Dispara la inicialización, y transmite la recuperación de la propiedad a la instancia real
var_dump($object->prop);
var_dump($object);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
lazy proxy object(Example)#3 (0) {
["prop"]=>
uninitialized(int)
}
bool(true)
Example::__construct
int(1)
lazy proxy object(Example)#3 (1) {
["instance"]=>
object(Example)#4 (1) {
["prop"]=>
int(1)
}
}
]]>
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><link linkend="language.oop5.lazy-objects">Objetos perezosos</link></member>
<member><methodname>ReflectionClass::newLazyGhost</methodname></member>
<member><methodname>ReflectionClass::newInstanceWithoutConstructor</methodname></member>
<member><methodname>ReflectionClass::resetAsLazyProxy</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
-->