-
Notifications
You must be signed in to change notification settings - Fork 7
/
bindto.xml
161 lines (146 loc) · 5.01 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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 9c74079f12d67cabb52c124d761f48275417d7eb Maintainer: pastore Status: ready -->
<!-- CREDITS: khelaz,cucinato -->
<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>
Duplica la closure con una nuova associazione all'oggetto e alla visibilità della 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>
Crea e restituisce una nuova <link linkend="functions.anonymous">funzione
anonima</link> come questa con lo stesso corpo e con le stesse variabili associate, ma
possibilmente con un altro oggetto associato e una nuova visibilità della classe.
</para>
<para>
“L'oggetto associato” determina il valore che avrà <literal>$this</literal>
nel corpo della funzione e la “visibilità della classe” rappresenta una classe
che determina a quali membri private e protected la funzione
sarà in grado di accedere. Ossia, i membri che saranno
visibili sono gli stessi che sarebbero se la funzione anonima fosse un metodo della
classe data come valore dal parametro
<parameter>newScope</parameter>.
</para>
<para>
Le closure statiche non possono avere nessun oggetto associato (il valore del parametro
<parameter>newThis</parameter> deve essere &null;), ma questa funzione può
comunque essere utilizzata per cambiare la loro visibilità.
</para>
<para>
Questa funzione si assicurerà che per una closure non-statica, avere un'istanza
associata implicherà essere convertita e viceversa. A tal fine,
le closure non-statiche a cui sono date una visibilità diversa da un'istanza &null; sono rese
statiche e le closure non-statiche senza visibilità a cui sono date un'istanza
non null sono convertite in una classe non specificata.
</para>
<note>
<para>
Se hai soltanto intenzione di duplicare la funzione anonima, invece puoi usare la
<link linkend="language.oop5.cloning">clonazione</link>.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>newThis</parameter></term>
<listitem>
<para>
L'oggetto al quale la funzione anonima data dovrebbe essere associata, o
&null; per le closure da dissociare.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>newScope</parameter></term>
<listitem>
<para>
L'ambito della classe a cui deve essere associata la closure, o
'static' per mantenere il corrente. Se invece viene dato un oggetto, verrà usato
il tipo dell'oggetto. Questo determina la visibilità dei metodi
protected e private dell'oggetto associato.
Non è consentito passare (un oggetto di) una classe interna come valore di questo parametro.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Restituisce un nuovo oggetto <classname>Closure</classname> creato
o &null; in caso di fallimento.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Esempio di <function>Closure::bindTo</function></title>
<programlisting role="php">
<![CDATA[
<?php
class A {
private $val;
function __construct($val) {
$this->val = $val;
}
function getClosure() {
//restituisce la closure associata con il suo oggetto e con la sua visibilità
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">Funzioni anonime</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
-->