-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathextract.xml
264 lines (259 loc) · 9.59 KB
/
extract.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
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: d58ee8eaaa7f716c51f66f5f1058ab3c42376d98 Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,shimooka -->
<refentry xml:id="function.extract" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>extract</refname>
<refpurpose>配列からシンボルテーブルに変数をインポートする</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>extract</methodname>
<methodparam><type>array</type><parameter role="reference">array</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer><constant>EXTR_OVERWRITE</constant></initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>prefix</parameter><initializer>""</initializer></methodparam>
</methodsynopsis>
<para>
配列から <link linkend="features.gc.refcounting-basics">シンボルテーブル</link> に変数をインポートします。
</para>
<para>
各キーについて変数名として有効であるかどうか、
そして、シンボルテーブルの既存の変数と衝突しないかどうかを確認します。
</para>
<warning>
<para>
ユーザーの入力、例えば <varname>$_GET</varname> や <varname>$_FILES</varname> のような、
信頼できないデータに <function>extract</function> を使用しないでください。
</para>
</warning>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>array</parameter></term>
<listitem>
<para>
この関数は連想配列 <parameter>var_array</parameter>
を引数とし、そのキーを変数名、値を変数の値として処理します。
各キー/値の組に関して、<parameter>flags</parameter> および
<parameter>prefix</parameter> パラメータに基づき、
現在のシンボルテーブルに変数を一つ作成します。
</para>
<para>
連想配列を使用する必要があります。<constant>EXTR_PREFIX_ALL</constant>
または <constant>EXTR_PREFIX_INVALID</constant> を使用しない限り、
数値添字の配列には結果は出力されません。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
無効または数値キーおよび衝突に関する対処法は、
<parameter>flags</parameter> で定義されます。
これは以下の値のどれかとなります。
<variablelist>
<varlistentry>
<term><constant>EXTR_OVERWRITE</constant></term>
<listitem>
<simpara>
衝突があった場合、存在する変数が上書きされます。
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_SKIP</constant></term>
<listitem>
<simpara>
衝突があった場合、存在する変数は上書きされません。
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_SAME</constant></term>
<listitem>
<simpara>
衝突があった場合、<parameter>prefix</parameter>
を前につけた新しい変数となります。
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_ALL</constant></term>
<listitem>
<simpara>
全ての変数の前に <parameter>prefix</parameter> を付けます。
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_INVALID</constant></term>
<listitem>
<simpara>
無効または数値の変数名のみに接頭辞
<parameter>prefix</parameter> を付けます。
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_IF_EXISTS</constant></term>
<listitem>
<simpara>
現在のシンボルテーブルに既に存在する場合にのみ上書きします。
例えば <varname>$_REQUEST</varname> からあなたが定義した変数のみを展開し
有効な変数としたいような場合に有用です。
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_IF_EXISTS</constant></term>
<listitem>
<simpara>
同じ変数だが接頭辞をつけていないバージョンの変数が
現在のシンボルテーブルに存在する場合にのみ
変数を生成します。
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_REFS</constant></term>
<listitem>
<simpara>
変数を参照として展開します。
これはインポート済みの変数が、
<parameter>array</parameter>
パラメータの値に常に参照付けられることを意味します。
このフラグを単独で使用するか、
あるいは<parameter>flags</parameter>と和算することにより、
他のフラグとそれを組み合わせることができます。
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
<parameter>flags</parameter> が指定されない場合、
<constant>EXTR_OVERWRITE</constant> とみなされます。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>prefix</parameter></term>
<listitem>
<para>
<parameter>prefix</parameter> は、
<parameter>flags</parameter> が
<constant>EXTR_PREFIX_SAME</constant>、<constant>EXTR_PREFIX_ALL</constant>、
<constant>EXTR_PREFIX_INVALID</constant> あるいは
<constant>EXTR_PREFIX_IF_EXISTS</constant> の場合にのみ必要であることに注意してください。
接頭辞を付けた変数名が有効な変数名でない場合、
この変数はシンボルテーブルにインポートされません。接頭辞は、
アンダースコア文字で配列のキーから自動的に分割されます。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
シンボルテーブルにインポートした変数の数を返します。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>extract</function> の例</title>
<para>
extract の使用例としては、シンボルテーブルに
<function>wddx_deserialize</function> から返された連想配列を
インポートすることが考えられます。
</para>
<programlisting role="php">
<![CDATA[
<?php
/* $var_array はwddx_deserializeから返された配列と仮定します */
$size = "large";
$var_array = array(
"color" => "blue",
"size" => "medium",
"shape" => "sphere"
);
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
blue, large, sphere, medium
]]>
</screen>
<para>
<constant>EXTR_PREFIX_SAME</constant> を指定したため、<varname>$size</varname>
は上書きされず、<varname>$wddx_size</varname> が作成されます。
<constant>EXTR_SKIP</constant> が指定された場合、<varname>$wddx_size</varname> は作成されません。
<constant>EXTR_OVERWRITE</constant>
の場合は、<varname>$size</varname> の値は "medium" となります。
<constant>EXTR_PREFIX_ALL</constant> の場合は新規の変数
<varname>$wddx_color</varname>,
<varname>$wddx_size</varname>, <varname>$wddx_shape</varname>
が作成されます。
</para>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<para>
<function>extract</function> をユーザー入力
(<varname>$_GET</varname> や <varname>$_FILES</varname> など)
のような信頼できないデータについて使用しないでください。
もし行う場合、
<constant>EXTR_SKIP</constant> のような <parameter>flags</parameter>
の値が上書きされていないことを確認してください。そして
<link linkend="ini">&php.ini;</link> の
<link linkend="ini.variables-order">variables_order</link>
で定義されたものと同じ順で展開すべきであることに留意してください。
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>compact</function></member>
<member><function>list</function></member>
</simplelist>
</para>
</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
-->