File: references.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (209 lines) | stat: -rw-r--r-- 7,067 bytes parent folder | download
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- up-to-date against phpdoc/en/language/ref.xml:1.6 -->
 <chapter id="language.references">
  <title>References uitgelegd</title>

  <sect1 id="language.references.whatare">
   <title>What References Are</title>
   <simpara>  
    References in PHP geven de mogelijkheid om dezelfde variable
    verschillende namen te geven. Ze zijn niet gelijk aan pointers
    in C, maar het zijn aliases in de symbol table van PHP. In
    PHP zijn variabele namen en variabele inhoud erg verschillend,
    daarom kan de zelfde content verschillende namen hebben. Een
    goed lijkend voorbeeld zijn Unix filenames and file -
    variabelenamen zijn directory entries, en variabelen zijn de
    file waarnaar de entry verwijst. References kom in dit voorbeeld
    dan overeen met hardlinks.
   </simpara>
  </sect1>

  <sect1 id="language.references.whatdo">
   <title>Wat References doen</title>
   <para>
    PHP references namek het mogelijk om twee variabelen naar dezelfde
    inhoud te laten wijzen, bijvoorbeeld als je doet:
    <informalexample>
     <programlisting role="php">
$a =&amp; $b 
     </programlisting>
    </informalexample>
    dan wijzen <varname>$a</varname> en <varname>$b</varname>
    naar exact dezelfde variabele.
    <note>
     <para>
      <varname>$a</varname> en <varname>$b</varname> zijn helemaal
      gelijk hier, het is niet dat <varname>$a</varname> naar
      <varname>$b</varname> wijst of andersom, maar
      <varname>$a</varname> en <varname>$b</varname> wijzen naar
      dezelde inhoud.
     </para>
    </note>
   </para>
   <para>
    Het tweede dat je met references kunt doen is het doorgeven van
    variabelen  by-reference. Dit wordt gedaan door een locale functie
    variabele aan een variabele te koppelen die wordt gebruikt in de
    aanroep, op deze manier wijzen ze dan naar dezelfde ruimte, zie
    dit voorbeeld:
    <informalexample>
     <programlisting role="php">
function foo (&amp;$var) {
    $var++;
}

$a=5;
foo ($a);
     </programlisting>
    </informalexample>
    In dit voorbeeld zal na aanroep van <literal>foo ($a)</literal>
    <varname>$a</varname> gelijk zijn aan 6. Dit gebeurd omdat in de
    functie <varname>foo</varname> de variabele 
    <varname>$var</varname> refereert naar dezelfde ruimte als
    <varname>$a</varname>.
   </para>
   <simpara>
    Het derde dat references kunnen doen is <link
    linkend="language.references.return">return by-reference</link>.
   </simpara>
  </sect1>

  <sect1 id="language.references.arent">
   <title>What References niet zijn</title>
   <para>
    Zoals eerder gezegd zijn references geen pointers. Dat betekend dat
    de volgende constructie niet doet wat je zou verwachten:
    <informalexample>
     <programlisting role="php">
function foo (&amp;$var) {
    $var =&amp; $GLOBALS["bazar"];
}
foo($bar); 
     </programlisting>
    </informalexample>
   </para>
   <simpara>
    Hier wordt <varname>$var</varname> in foo gebonden aan
    <varname>$bar</varname> in de aanroep, maar wordt dan herbonden 
    met <varname>$GLOBALS["baz"]</varname>. Er is geen enkele manier
    om <varname>$bar</varname> in de aanroep te binden aan iets anders
    met het references mechanisme, omdat <varname>$bar</varname> niet
    beschikbaar is in de functie foo (het wordt gerepresenteerd door
    <varname>$var</varname>, maar <varname>$var</varname> heeft alleen
    maar variabele inhoud en geen naam-naar-value binding in de symbol
    table van de aanroepende functie).
   </simpara>
  </sect1>

  <sect1 id="language.references.return">
   <title>Returning References</title>
   <para>
    Returning by-reference is nuttig als je in een functie een variabele
    wilt zoeken waaraan een reference gebonden moet worden. Als je
    references wilt teruggeven gebruik je de volgende syntax:
    <informalexample>
     <programlisting role="php">
function &amp;find_var ($param) {
    ...code...
    return $found_var;
}

$foo =&amp; find_var ($bar);
$foo-&gt;x = 2; 
     </programlisting>
    </informalexample>
    In dit voorbeeld wordt de property van het object dat teruggegeven
    wordt door de <varname>find_var</varname> functie worden aangepast
    tot 2, en niet op een kopie van het object zoals gebeurd zou zijn
    als je niet de reference syntax gebruikt.
   </para>
   <note>
    <simpara>
     In tegenstelling tot het doorgeven van parameter passing, moet je
     hier <literal>&amp;</literal> gebruiken op beide plaatsen om
     aan te geven dat je wilt teruggeven by-rerence, en niet op een
     kopie, zoals normaal gebeurd.
    </simpara>
   </note>
  </sect1>

  <sect1 id="language.references.unset">
   <title>References verbreken</title>
   <para>
    Als je een reference unset, dan verbreek je alleen de binding
    tussen de variabele naam en de inhoud van de variabele. Dit
    betkend niet dat de inhoud van de variabele wordt verwijderd.
    Bij voorbeeld zal
    <informalexample>
     <programlisting role="php">
$a = 1;
$b =&amp; $a;
unset ($a); 
     </programlisting>
    </informalexample>
    <varname>$b</varname> nog steeds 1 bevatten, alleen zal
    <varname>$a</varname> niet meer verwijzen naar deze inhoud (en
    bestaat dus niet meer).
   </para>
   <simpara>
    Je kunt ook hierbij weer denken aan de analogie met de Unix system
    call <command>unlink</command>.
   </simpara>
  </sect1>

  <sect1 id="language.references.spot">
   <title>Spotting References</title>
   <simpara>
    Veel syntax constructies in PHP zijn ge&iuml;nplementeerd met
    reference mechanismen. Alles wat hierboven is verteld geld ook
    voor deze constructies. Sommige constructies, zoals het doorgeven
    en teruggeven van references zijn eerder genoemd. Andere
    constructies die references gebruiken zijn:
   </simpara>

   <sect2 id="references.global">
    <title><literal>global</literal> References</title>
    <para>
     Als je een variabele declareerd met <command>global $var</command>,
     dan maak he eigenlijk een reference naar een global variabele.
     Dit betekend dat dit hetzlefde is als:
     <informalexample>
      <programlisting role="php">
$var =&amp; $GLOBALS["var"];
      </programlisting>
     </informalexample>
    </para>
    <simpara>
     Dit betekend ook dat het unsetting van <varname>$var</varname> in
     dit voorbeeld, niet de globale variabele unset.
    </simpara>
   </sect2>

   <sect2 id="references.this">
    <title><literal>$this</literal></title>
    <simpara>
     In een methode van een object is <varname>$this</varname> altijd
     een reference naar het object wat de methode heeft aangeroepen.
    </simpara>
   </sect2>
  </sect1>

 </chapter>
 
<!-- 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:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->