-
Notifications
You must be signed in to change notification settings - Fork 70
/
globals.xml
133 lines (125 loc) · 4.8 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
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: a7f535a32ba19f7e8236b9d87f3d84552c5f9b64 Maintainer: irker Status: ready -->
<!-- Reviewed: no -->
<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>Ссылки на все переменные глобальной области видимости</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<para>
Ассоциативный массив (<type>array</type>), содержащий ссылки на все переменные,
определённые в данный момент в глобальной области видимости скрипта. Имена переменных являются ключами массива.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example xml:id="variable.globals.basic">
<title>Пример использования <varname>$GLOBALS</varname></title>
<programlisting role="php">
<![CDATA[
<?php
function test() {
$foo = "локальная переменная";
echo '$foo в глобальной области видимости: ' . $GLOBALS["foo"] . "\n";
echo '$foo в текущей области видимости: ' . $foo . "\n";
}
$foo = "Пример содержимого";
test();
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
$foo в глобальной области видимости: Пример содержимого
$foo в текущей области видимости: локальная переменная
]]>
</screen>
</example>
</para>
<warning>
<para>
Начиная с PHP 8.1.0, доступ на запись ко всему массиву <varname>$GLOBALS</varname> больше не поддерживается:
<example xml:id="variable.globals.entire_write_error">
<title>запись всего <varname>$GLOBALS</varname> приведёт к ошибке</title>
<programlisting role="php">
<![CDATA[
<?php
// Генерирует ошибку во время компиляции:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x;
$x =& $GLOBALS;
unset($GLOBALS);
array_pop($GLOBALS);
// ...и любые другие операции записи/чтения-записи в $GLOBALS
?>
]]>
</programlisting>
</example>
</para>
</warning>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
¬e.is-superglobal;
<note>
<title>Доступность переменной</title>
<para>
В отличие от всех остальных <link linkend="language.variables.superglobals">суперглобальных</link> переменных,
<varname>$GLOBALS</varname> всегда доступна в PHP.
</para>
</note>
<note>
<para>
Начиная с PHP 8.1.0, массив <varname>$GLOBALS</varname> теперь является доступной только для чтения копией глобальной таблицы символов.
То есть глобальные переменные не могут быть изменены с помощью его копии.
Ранее массив <varname>$GLOBALS</varname> исключался из обычного поведения массивов PHP по значению и глобальные переменные можно было изменить с помощью его копии.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// До PHP 8.1.0
$a = 1;
$globals = $GLOBALS; // Как будто бы по значению копии
$globals['a'] = 2;
var_dump($a); // int(2)
// Начиная с PHP 8.1.0
// больше не изменяет значение $a. Предыдущее поведение нарушало семантику по значению
$globals = $GLOBALS;
$globals['a'] = 1;
// Чтобы восстановить предыдущее поведение, повторите его копию и присвойте каждому свойству значение $ 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
-->