/
bindto.xml
175 lines (158 loc) · 5.26 KB
/
bindto.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 2a4874ed531bcc223ca4bc1b4f9a5292594abaea 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
Funktion kann trotzdem verwendet werden, um den Geltungsbereich ihrer
Klasse zu ändern.
</para>
<para>
Diese Funktion 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
-->