-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathglobals.xml
More file actions
150 lines (133 loc) · 3.94 KB
/
Copy pathglobals.xml
File metadata and controls
150 lines (133 loc) · 3.94 KB
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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: d58ee8eaaa7f716c51f66f5f1058ab3c42376d98 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: yes Maintainer: PhilDaiguille -->
<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>Hace referencia a todas las variables disponibles en un contexto global</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<para>
Un <type>array</type> asociativo que contiene referencias a todas las variables
globales actualmente definidas en el contexto de ejecución global del
script. Los nombres de las variables son los índices del array.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example xml:id="variable.globals.basic">
<title>Ejemplo con <varname>$GLOBALS</varname></title>
<programlisting role="php">
<![CDATA[
<?php
function test()
{
$foo = "variable local";
echo '$foo en el contexto global : ' . $GLOBALS["foo"] . "\n";
echo '$foo en el contexto actual : ' . $foo . "\n";
}
$foo = "Contenido de ejemplo";
test();
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
$foo en el contexto global : Contenido de ejemplo
$foo en el contexto actual : variable local
]]>
</screen>
</example>
</para>
<warning>
<para>
A partir de PHP 8.1.0, el acceso en escritura al array entero
<varname>$GLOBALS</varname> ya no es soportado:
<example xml:id="variable.globals.entire_write_error">
<title>Escribir en el array entero <varname>$GLOBALS</varname> resultará en un error.</title>
<programlisting role="php">
<![CDATA[
<?php
// Genera un error durante la compilación:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...y cualquier otra operación de escritura/lectura-escritura en $GLOBALS
?>
]]>
</programlisting>
</example>
</para>
</warning>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
¬e.is-superglobal;
<note>
<title>Disponibilidad de las variables</title>
<para>
A diferencia de todas las demás
<link linkend="language.variables.superglobals">superglobales</link>,
<varname>$GLOBALS</varname> siempre ha estado disponible en PHP.
</para>
</note>
<note>
<para>
A partir de PHP 8.1.0, <varname>$GLOBALS</varname> es ahora una
copia de solo lectura del <link linkend="features.gc.refcounting-basics">array de símbolos</link>
global.
Es decir, las variables globales no pueden ser modificadas a través de su copia.
Anteriormente, el array <varname>$GLOBALS</varname> estaba excluido del
comportamiento habitual por valor de los arrays de PHP y las variables globales
podían ser modificadas a través de su copia.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Antes de PHP 8.1.0
$a = 1;
$globals = $GLOBALS; // Copia ostensiblemente por valor
$globals['a'] = 2;
var_dump($a); // int(2)
// A partir de PHP 8.1.0
// esto ya no modifica $a. El comportamiento anterior violaba la semántica por valor.
$globals = $GLOBALS;
$globals['a'] = 1;
// Para restaurar el comportamiento anterior, iterar su copia y asignar cada propiedad de vuelta a $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
-->