T_ENCAPSED_AND_WHITESPACED is returned when parsing strings with evaluated content, like "some $value" or this example from the Strings reference page:
<?php
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
This last example is tokenized as:
T_ECHO
echo
T_WHITESPACE
%20 (a space character)
T_START_HEREDOC
<<
T_ENCAPSED_AND_WHITESPACE
My name is "
T_VARIABLE
$name
T_ENCAPSED_AND_WHITESPACE
". I am printing some
T_VARIABLE
$foo
T_OBJECT_OPERATOR
->
T_STRING
foo
T_ENCAPSED_AND_WHITESPACE
. Now, I am printing some
T_CURLY_OPEN
{
T_VARIABLE
$foo
T_OBJECT_OPERATOR
->
T_STRING
bar
(terminal)
[
T_LNUMBER
1
(terminal)
]
(terminal)
}
T_ENCAPSED_AND_WHITESPACE
. This should print a capital 'A': \x41
T_END_HEREDOC
EOT
(terminal)
;
パーサトークンの一覧
PHP 言語の種々の部分は、内部的に T_SR のように表されています。PHP は、 パーサエラーが発生した際に、これらの ID を "Parse error: unexpected T_SR, expecting ',' or ';' in script.php on line 10." のように出力します。
ここでは、T_SR が何を意味するのかを知っていることを仮定しています。 この対応が分からない方のために、以下にこれらの ID、PHP 構文、マニュアルでの 適当な参照先の一覧を示します。
注意: 定数 T_* の使いかた
以下のトークンは、すべて PHP の定数としても定義されています。その値は、 PHP のベースとなるパーサ基盤に基づいて自動生成されます。 つまり、トークンの具体的な値は、PHP のバージョンが違えば変わる可能性があるということです。 たとえば
T_FILEの値は PHP 5.3 では 365 ですが、PHP 5.4 ではこの値はT_TRAITを表し、T_FILEの値は 369 となります。 つまり、コードの中では決して T_* の実際の値を使ってはいけないということです。 それは PHP X.Y.Z でたまたまその値になっているだけであり、 その値に依存してしまえば PHP のバージョンが変わったときに互換性がなくなってしまいます。 その代わりに、コードでは独自の値 (たとえば 10000 のような大きな値) を使い、PHP のバージョンや T_* の値が変わってもうまく動作するようにしておきましょう。
| トークン | 構文 | 参照先 |
|---|---|---|
T_ABSTRACT |
abstract | クラスの抽象化 (PHP 5.0.0 以降で使用可能) |
T_AND_EQUAL |
&= | 代入演算子 |
T_ARRAY |
array() | array(), array 構文 |
T_ARRAY_CAST |
(array) | 型キャスト |
T_AS |
as | foreach |
T_BAD_CHARACTER |
ASCII 32以下の全ての文字。\t (0x09), \n (0x0a) , \r (0x0d) は除く | |
T_BOOLEAN_AND |
&& | 論理演算子 |
T_BOOLEAN_OR |
|| | 論理演算子 |
T_BOOL_CAST |
(bool) or (boolean) | 型キャスト |
T_BREAK |
break; | break |
T_CALLABLE |
callable | callable |
T_CASE |
case | switch |
T_CATCH |
catch | 例外(exceptions) (PHP 5.0.0 以降で使用可能) |
T_CHARACTER |
今では使用されていません | |
T_CLASS |
class | クラスとオブジェクト |
T_CLASS_C |
__CLASS__ | マジック定数 (PHP 4.3.0 以降で使用可能) |
T_CLONE |
clone | クラスとオブジェクト (PHP 5.0.0 以降で使用可能) |
T_CLOSE_TAG |
?> or %> | HTML からの脱出 |
T_COMMENT |
// or #, and /* */ in PHP 5 | コメント |
T_CONCAT_EQUAL |
.= | 代入演算子 |
T_CONST |
const | クラス定数 |
T_CONSTANT_ENCAPSED_STRING |
"foo" or 'bar' | 文字列構文 |
T_CONTINUE |
continue | continue |
T_CURLY_OPEN |
{$ | 複雑な構文 |
T_DEC |
-- | 可算/減算演算子 |
T_DECLARE |
declare | declare |
T_DEFAULT |
default | switch |
T_DIR |
__DIR__ | マジック定数 (PHP 5.3.0 以降で使用可能) |
T_DIV_EQUAL |
/= | 代入演算子 |
T_DNUMBER |
0.12, etc | 浮動小数点数 |
T_DOC_COMMENT |
/** */ | PHPDoc 形式のコメント (PHP 5.0.0 以降で使用可能) |
T_DO |
do | do..while |
T_DOLLAR_OPEN_CURLY_BRACES |
${ | complex variable parsed syntax |
T_DOUBLE_ARROW |
=> | array 構文 |
T_DOUBLE_CAST |
(real), (double) or (float) | 型キャスト |
T_DOUBLE_COLON |
:: | 下の T_PAAMAYIM_NEKUDOTAYIM を参照ください。 |
T_ECHO |
echo | echo |
T_ELSE |
else | else |
T_ELSEIF |
elseif | elseif |
T_EMPTY |
empty | empty() |
T_ENCAPSED_AND_WHITESPACE |
" $a" | 文字列のパース |
T_ENDDECLARE |
enddeclare | declare, 別の構文 |
T_ENDFOR |
endfor | for, 別の構文 |
T_ENDFOREACH |
endforeach | foreach, 別の構文 |
T_ENDIF |
endif | if, 別の構文 |
T_ENDSWITCH |
endswitch | switch, 別の構文 |
T_ENDWHILE |
endwhile | while, 別の構文 |
T_END_HEREDOC |
heredoc 構文 | |
T_EVAL |
eval() | eval() |
T_EXIT |
exit or die | exit(), die() |
T_EXTENDS |
extends | extends, クラスとオブジェクト |
T_FILE |
__FILE__ | 定数 |
T_FINAL |
final | finalキーワード (PHP 5.0.0 以降で使用可能) |
T_FOR |
for | for |
T_FOREACH |
foreach | foreach |
T_FUNCTION |
function or cfunction | 関数 |
T_FUNC_C |
__FUNCTION__ | 定数 (PHP 4.3.0 以降で使用可能) |
T_GLOBAL |
global | 変数のスコープ |
T_GOTO |
goto | (PHP 5.3.0 以降で使用可能) |
T_HALT_COMPILER |
__halt_compiler() | __halt_compiler (PHP 5.1.0 以降で使用可能) |
T_IF |
if | if |
T_IMPLEMENTS |
implements | オブジェクト インターフェイス (PHP 5.0.0 以降で使用可能) |
T_INC |
++ | 加算/減算演算子 |
T_INCLUDE |
include() | include |
T_INCLUDE_ONCE |
include_once() | include_once |
T_INLINE_HTML |
PHP の外部のテキスト | |
T_INSTANCEOF |
instanceof | 型演算子 (PHP 5.0.0 以降で使用可能) |
T_INSTEADOF |
insteadof | トレイト (PHP 5.4.0 以降で使用可能) |
T_INT_CAST |
(int) or (integer) | 型キャスト |
T_INTERFACE |
interface | オブジェクト インターフェイス (PHP 5.0.0 以降で使用可能) |
T_ISSET |
isset() | isset() |
T_IS_EQUAL |
== | 比較演算子 |
T_IS_GREATER_OR_EQUAL |
>= | 比較演算子 |
T_IS_IDENTICAL |
=== | 比較演算子 |
T_IS_NOT_EQUAL |
!= or <> | 比較演算子 |
T_IS_NOT_IDENTICAL |
!== | 比較演算子 |
T_IS_SMALLER_OR_EQUAL |
<= | 比較演算子 |
T_LINE |
__LINE__ | 定数 |
T_LIST |
list() | list() |
T_LNUMBER |
123, 012, 0x1ac, etc | 整数 |
T_LOGICAL_AND |
and | 論理演算子 |
T_LOGICAL_OR |
or | 論理演算子 |
T_LOGICAL_XOR |
xor | 論理演算子 |
T_METHOD_C |
__METHOD__ | マジック定数 (PHP 5.0.0 以降で使用可能) |
T_MINUS_EQUAL |
-= | 代入演算子 |
T_ML_COMMENT |
/* and */ | コメント (PHP 4 のみ) |
T_MOD_EQUAL |
%= | 代入演算子 |
T_MUL_EQUAL |
*= | 代入演算子 |
T_NAMESPACE |
namespace | 名前空間 (PHP 5.3.0 以降で使用可能) |
T_NS_C |
__NAMESPACE__ | 名前空間 (PHP 5.3.0 以降で使用可能) |
T_NS_SEPARATOR |
\ | 名前空間 (PHP 5.3.0 以降で使用可能) |
T_NEW |
new | クラスとオブジェクト |
T_NUM_STRING |
"$a[0]" | 文字列内の配列の添字 |
T_OBJECT_CAST |
(object) | 型キャスト |
T_OBJECT_OPERATOR |
-> | クラスとオブジェクト |
T_OLD_FUNCTION |
old_function | (PHP 4 のみ) |
T_OPEN_TAG |
<?php, <? or <% | HTML からのエスケープ |
T_OPEN_TAG_WITH_ECHO |
<?= or <%= | HTML からのエスケープ |
T_OR_EQUAL |
|= | 代入演算子 |
T_PAAMAYIM_NEKUDOTAYIM |
:: | ::。
T_DOUBLE_COLON としても定義されています。 |
T_PLUS_EQUAL |
+= | 代入演算子 |
T_PRINT |
print() | |
T_PRIVATE |
private | クラスとオブジェクト (PHP 5.0.0 以降で使用可能) |
T_PUBLIC |
public | クラスとオブジェクト (PHP 5.0.0 以降で使用可能) |
T_PROTECTED |
protected | クラスとオブジェクト (PHP 5.0.0 以降で使用可能) |
T_REQUIRE |
require() | require |
T_REQUIRE_ONCE |
require_once() | require_once |
T_RETURN |
return | 値を返す |
T_SL |
<< | ビット演算子 |
T_SL_EQUAL |
<<= | 代入演算子 |
T_SR |
>> | ビット演算子 |
T_SR_EQUAL |
>>= | 代入演算子 |
T_START_HEREDOC |
<<< | heredoc 構文 |
T_STATIC |
static | 変数スコープ |
T_STRING |
parent、true など | 識別子。たとえば strings、 そして parent や self といったオブジェクト指向のキーワード、そして関数やクラスなどにマッチします。 |
T_STRING_CAST |
(string) | 型キャスト |
T_STRING_VARNAME |
"${a | 複雑な構文 |
T_SWITCH |
switch | switch |
T_THROW |
throw | 例外(exceptions) (PHP 5.0.0 以降で使用可能) |
T_TRAIT |
trait | トレイト (PHP 5.4.0 以降で使用可能) |
T_TRAIT_C |
__TRAIT__ | __TRAIT__ (PHP 5.4.0 以降で使用可能) |
T_TRY |
try | 例外(exceptions) (PHP 5.0.0 以降で使用可能) |
T_UNSET |
unset() | unset() |
T_UNSET_CAST |
(unset) | 型キャスト (PHP 5.0.0 以降で使用可能) |
T_USE |
use | 名前空間 (PHP 5.3.0 以降で使用可能、PHP 4.0.0 以降で予約済み) |
T_VAR |
var | クラスとオブジェクト |
T_VARIABLE |
$foo | 変数 |
T_WHILE |
while | while, do..while |
T_WHITESPACE |
\t \r\n | |
T_XOR_EQUAL |
^= | 代入演算子 |
token_name() も参照ください。
Some tokens are not documented, so here they are:
all of them are located within non-constant ""-strings:
T_CHARACTER - \r\n\t... . They're presented AS IS and NOT replaced with actual characters
T_ENCAPSED_AND_WHITESPACE - whitespace
T_DOLLAR_OPEN_CURLY_BRACES - ${ (ONLY in non-constant ""-strings)
T_STRING - strings (example: "$a aa")
T_NUM_STRING - numbers (exaple: "$a 0")
still have no idea what T_ENCAPSED_AND_WHITESPACE means... :(
T_ENCAPSED_AND_WHITESPACE is whitespace which intersects a group of tokens. For example, an "unexpected T_ENCAPSED_AND_WHITESPACE" error is produced by the following code:
<?php
$main_output_world = 'snakes!'
echo('There are' 10 $main_output_world);
?>
Note the missing concatenation operator between the two strings leads to the whitespace error that is so named above. The concatenation operator instructs PHP to ignore the whitespace between the two code tokens (the so named "encapsed" data"), rather than parse it as a token itself.
The correct code would be:
<?php
$main_output_world = 'snakes!'
echo('There are' . 10 . $main_output_world);
?>
Note the addition of the concatenation operator between each token.
