-
Notifications
You must be signed in to change notification settings - Fork 62
/
token-get-all.xml
204 lines (197 loc) · 5.44 KB
/
token-get-all.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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 82c84a325ea8d03f45669988e4f6ed53221ebd8f Maintainer: hirokawa Status: ready -->
<!-- Credits: mumumu -->
<refentry xml:id="function.token-get-all" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>token_get_all</refname>
<refpurpose>指定したソースを PHP トークンに分割する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>token_get_all</methodname>
<methodparam><type>string</type><parameter>code</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<para>
<function>token_get_all</function> は指定した文字列
<parameter>code</parameter> をパースし、Zend engine の
字句解析スキャナにより PHP 言語のトークンに分割します。
</para>
<para>
パーサトークンの一覧を得るには、<xref linkend="tokens"/> を参照するか、
あるいは <function>token_name</function> でトークン値を文字列表現に
変換します。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>code</parameter></term>
<listitem>
<para>
パースする PHP ソース。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
以下のフラグが使えます。
<itemizedlist>
<listitem>
<simpara>
<constant>TOKEN_PARSE</constant> -
特定のコンテキストで予約語を使った場合に、それを認識する。
</simpara>
</listitem>
</itemizedlist>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
トークン ID の配列を返します。配列の各要素には、一文字単位の文字列
(例: <literal>;</literal>、<literal>.</literal>、
<literal>></literal>、<literal>!</literal> など...)、
またはトークンのインデックスを 0 番目の要素、トークンの文字列表現を 1 番目の要素、
行番号を 2 番目の要素とする配列が含まれます。
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>token_get_all</function> の例</title>
<programlisting role="php">
<![CDATA[
<?php
$tokens = token_get_all('<?php echo; ?>');
foreach ($tokens as $token) {
if (is_array($token)) {
echo "Line {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Line 1: T_OPEN_TAG ('<?php ')
Line 1: T_ECHO ('echo')
Line 1: T_WHITESPACE (' ')
Line 1: T_CLOSE_TAG ('?>')
]]>
</screen>
</example>
</para>
<para>
<example>
<title><function>token_get_all</function> の間違った使いかた</title>
<programlisting role="php">
<![CDATA[
<?php
$tokens = token_get_all('/* comment */');
foreach ($tokens as $token) {
if (is_array($token)) {
echo "Line {$token[2]}: ", token_name($token[0]), " ('{$token[1]}')", PHP_EOL;
}
}
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Line 1: T_INLINE_HTML ('/* comment */')
]]>
</screen>
</example>
先ほどの例では、文字列が <constant>T_COMMENT</constant>
ではなく <constant>T_INLINE_HTML</constant> とパースされていたことに注意しましょう。
これは、指定した "code" の中に開始タグが含まれていないからです。
通常のファイルで、コメントを PHP タグの外部に書いた場合にも同じようになります。
</para>
<para>
<example>
<title>
予約語を使ったクラスでの <function>token_get_all</function> の例
</title>
<programlisting role="php">
<![CDATA[
<?php
$source = <<<'code'
<?php
class A
{
const PUBLIC = 1;
}
code;
$tokens = token_get_all($source, TOKEN_PARSE);
foreach ($tokens as $token) {
if (is_array($token)) {
echo token_name($token[0]) , PHP_EOL;
}
}
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
T_OPEN_TAG
T_WHITESPACE
T_CLASS
T_WHITESPACE
T_STRING
T_CONST
T_WHITESPACE
T_STRING
T_LNUMBER
]]>
</screen>
</example>
<constant>TOKEN_PARSE</constant> フラグを指定しなければ、最後から二番目のトークン
(<constant>T_STRING</constant>) が
<constant>T_PUBLIC</constant> と解釈されてしまいます。
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>PhpToken::tokenize</function></member>
<member><function>token_name</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
-->