-
Notifications
You must be signed in to change notification settings - Fork 146
/
bindto.xml
165 lines (148 loc) · 4.88 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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2a4874ed531bcc223ca4bc1b4f9a5292594abaea Maintainer: yannick Status: ready -->
<!-- Reviewed: yes -->
<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>
Duplique la fermeture avec un nouvel objet lié et un nouveau contexte de classe.
</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>
Crée et retourne une nouvelle <link linkend="functions.anonymous">fonction anonyme
</link> avec le même corps et les même variables liées que l'originale, mais avec un objet lié
qui peut être différent, et un nouveau contexte de classe.
</para>
<para>
L'objet lié détermine la valeur que <literal>$this</literal> aura dans le corps de la fonction,
et le contexte de classe représente une classe qui détermine à quels membres privés et protégés
la fonction anonyme aura accès. Autrement dit, les propriétés qui seront visibles seront les
mêmes que si la fonction anonyme était une méthode de la classe passée via le paramètre
<parameter>newScope</parameter>.
</para>
<para>
Les fermetures statiques ne peuvent pas avoir d'objet lié (la valeur du paramètre
<parameter>newThis</parameter> devrait être &null;), mais le contexte de classe peut,
lui, être changé.
</para>
<para>
Cette fonction va vérifier qu'une fermeture non-statique à laquelle on passe
un contexte d'objet deviendra liée à cet objet (et ne sera donc plus non-statique),
et vice-versa. Dans ce but, les fermetures non-statiques auxquelles on passe un
contexte de classe mais &null; comme contexte objet seront rendues statiques, et
inversement.
</para>
<note>
<para>
Si vous voulez seulement dupliquer la fonction anonyme, vous pouvez utiliser
<link linkend="language.oop5.cloning">le clonage</link> à la place.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>newThis</parameter></term>
<listitem>
<para>
L'objet auquel lier la fonction anonyme, ou &null; pour une fermeture statique.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>newScope</parameter></term>
<listitem>
<para>
Le contexte de classe à associer à la fermeture, ou 'static' pour conserver le
contexte actuel. Si un objet est passé, son type sera utilisé.
Ceci determine la visibilité des méthodes protégées et privées de l'objet lié.
Il n'est pas autorisé de passer (un objet d') une classe interne pour
ce paramètre.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Retourne la nouvelle fermeture sous la forme d'un objet <classname>Closure</classname>,
ou &null; en cas d'erreur.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Exemple <function>Closure::bindTo</function></title>
<programlisting role="php">
<![CDATA[
<?php
class A
{
private $val;
public function __construct($val)
{
$this->val = $val;
}
public function getClosure()
{
//Retourne une fermeture liée à cet objet et ce contexte
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">Fonctions anonymes</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
-->