-
Notifications
You must be signed in to change notification settings - Fork 40
/
globals.xml
145 lines (135 loc) · 3.98 KB
/
globals.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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a7f535a32ba19f7e8236b9d87f3d84552c5f9b64 Maintainer: sammywg Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: a7f535a32ba19f7e8236b9d87f3d84552c5f9b64 Reviewer: samesch -->
<refentry role="variable" xml:id="reserved.variables.globals" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>$GLOBALS</refname>
<refpurpose>Referenziert alle Variablen, die im globalen Gültigkeitsbereich
vorhanden sind</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<para>
Ein assoziatives <type>Array</type>, das Referenzen auf alle Variablen enthält,
die derzeit im globalen Gültigkeitsbereich (Scope) des Skripts bekannt sind.
Die Namen der jeweiligen Variablen sind die Schlüsselwerte, um auf den Inhalt
der jeweils referenzierten Variablen zuzugreifen.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example xml:id="variable.globals.basic">
<title><varname>$GLOBALS</varname>-Beispiel</title>
<programlisting role="php">
<![CDATA[
<?php
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
$foo in global scope: Example content
$foo in current scope: local variable
]]>
</screen>
</example>
</para>
<warning>
<para>
Seit PHP 8.1.0 wird der Schreibzugriff auf das gesamte
<varname>$GLOBALS</varname>-Array nicht mehr unterstützt:
<example xml:id="variable.globals.entire_write_error">
<title>Das Schreiben des gesamten <varname>$GLOBALS</varname> führt zu einem Fehler</title>
<programlisting role="php">
<![CDATA[
<?php
// Erzeugt einen Kompilierungsfehler:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...und jede andere Schreib-/Lese-Schreiboperation auf $GLOBALS
?>
]]>
</programlisting>
</example>
</para>
</warning>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
¬e.is-superglobal;
<note>
<title>Verfügbarkeit der Variablen</title>
<para>
Im Gegensatz zu allen anderen
<link linkend="language.variables.superglobals">Superglobals</link> ist
<varname>$GLOBALS</varname> notwendigerweise immer in PHP verfügbar.
</para>
</note>
<note>
<para>
Seit PHP 8.1.0 ist <varname>$GLOBALS</varname> eine schreibgeschützte
Kopie der globalen Symboltabelle. Das heißt, globale Variablen können
nicht über diese Kopie verändert werden. Zuvor war das Array
<varname>$GLOBALS</varname> vom üblichen Verhalten der Wertübergabe
(by-value) von PHP-Arrays ausgenommen und globale Variablen konnten über
seine Kopie geändert werden.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Vor PHP 8.1.0
$a = 1;
$globals = $GLOBALS; // Eine by-value-Kopie
$globals['a'] = 2;
var_dump($a); // int(2)
// Seit PHP 8.1.0
// $a wird dadurch nicht mehr verändert. Das vorherige Verhalten verletzte die Semantik von by-value.
$globals = $GLOBALS;
$globals['a'] = 1;
// Um das vorherige Verhalten wiederherzustellen, durchlaufen Sie die Kopie und übertragen jede Eigenschaft zurück auf $GLOBALS.
foreach ($globals as $key => $value) {
$GLOBALS[$key] = $value;
}
?>
]]>
</programlisting>
</informalexample>
</para>
</note>
</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
-->