1
0
mirror of https://github.com/php/doc-de.git synced 2026-03-24 07:12:15 +01:00
Files
Martin Samesch 856c4ea937 Sync with EN
2024-08-26 22:29:08 +02:00

176 lines
5.3 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 80720e59fc88b2522fe2e119b0148caaaa214b0b Maintainer: samesch Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="closure.bindto" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>Closure::bindTo</refname>
<refpurpose>
Dupliziert eine Closure mit einem neuen gebundenen Objekt und Geltungsbereich einer Klasse
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis role="Closure">
<modifier>public</modifier> <type class="union"><type>Closure</type><type>null</type></type><methodname>Closure::bindTo</methodname>
<methodparam><type class="union"><type>object</type><type>null</type></type><parameter>newThis</parameter></methodparam>
<methodparam choice="opt"><type class="union"><type>object</type><type>string</type><type>null</type></type><parameter>newScope</parameter><initializer>"static"</initializer></methodparam>
</methodsynopsis>
<para>
Erzeugt eine neue
<link linkend="functions.anonymous">anonyme Funktion</link> mit demselben
Funktionskörper und denselben gebundenen Variablen wie diese und gibt sie
zurück, aber möglicherweise mit einem anderen gebundenen Objekt und einem
neuen Geltungsbereich der Klasse.
</para>
<para>
Das "gebundene Objekt" bestimmt den Wert, den <literal>$this</literal> im
Funktionskörper haben wird, und der "Klassenbereich" ist eine Klasse, die
bestimmt, auf welche private und protected Mitglieder die anonyme Funktion
zugreifen kann. Das heißt, die für die Funktion sichtbaren Mitglieder sind
dieselben, als ob die anonyme Funktion eine Methode der im Parameter
<parameter>newScope</parameter> übergebenen Klasse wäre.
</para>
<para>
Eine statische Closure kann zwar kein Objekt binden (der Wert des
Parameters <parameter>newThis</parameter> muss &null; sein), aber diese
Methode kann trotzdem verwendet werden, um den Geltungsbereich ihrer
Klasse zu ändern.
</para>
<para>
Diese Methode stellt sicher, dass eine nicht-statische Closure mit einer
gebundenen Instanz einen Geltungsbereich hat und umgekehrt. Zu diesem Zweck
wird eine nicht-statische Closure, der zwar ein Geltungsbereich, dafür aber
nur eine eine &null;-Instanz gegeben wird, statisch gemacht, und eine
nicht-statische Closure ohne Geltungsbereich, die eine Nicht-&null;-Instanz
erhält, kommt in den Geltungsbereich einer nicht spezifizierte Klasse.
</para>
<note>
<para>
Wenn nur anonyme Funktionen dupliziert werden sollen, kann
stattdessen <link linkend="language.oop5.cloning">cloning</link> verwendet
werden.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>newThis</parameter></term>
<listitem>
<para>
Das Objekt, an das die angegebene anonyme Funktion gebunden werden soll,
oder &null; wenn die Closure nicht gebunden werden soll.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>newScope</parameter></term>
<listitem>
<para>
Der Bereich der Klasse, dem die Closure zugeordnet werden soll, oder
'static', um den aktuellen Bereich beizubehalten. Wenn ein Objekt
angegeben wird, wird stattdessen der Typ des Objekts verwendet. Dieser
bestimmt die Sichtbarkeit der protected und private Methoden des
gebundenen Objekts. Es ist nicht erlaubt, eine interne Klasse (oder ein
Objekt einer solchen) als Parameter zu übergeben.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Gibt ein neu erstelltes <classname>Closure</classname>-Objekt zurück oder
&null;, wenn ein Fehler auftritt.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title><function>Closure::bindTo</function>-Beispiel</title>
<programlisting role="php">
<![CDATA[
<?php
class A
{
private $val;
public function __construct($val)
{
$this->val = $val;
}
public function getClosure()
{
// Gibt eine Closure zurück, die an dieses Objekt und diesen
// Bereich gebunden ist
return function() {
return $this->val;
};
}
}
$ob1 = new A(1);
$ob2 = new A(2);
$cl = $ob1->getClosure();
echo $cl(), "\n";
$cl = $cl->bindTo($ob2);
echo $cl(), "\n";
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
1
2
]]>
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><link linkend="functions.anonymous">Anonyme Funktionen</link></member>
<member><methodname>Closure::bind</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
-->