きっかけは本日の講義でもらった質問。
PHPで、ダブルクォート内の変数が展開される、ってのはあって。
{}を入れないと「$に続く、有効な変数名を形成することが可能な最長のトークンを取得する」ってのが基本ざんす。
なので、以下は…
<?php $a = 1; $ab = 2; $abc = 3; $s = "$abcdefg"; var_dump($s);
string(0) ""
こうなりまふ。
なので、通常{}を使って「明示する」ほうが楽ができるんでござんす。
<?php $a = 1; $ab = 2; $abc = 3; $s = "{$ab}cdefg"; var_dump($s);
string(6) "2cdefg"
さて。質問があったのは、以下のパターン。参考書に書いてあるらしい。
<?php $a = 1; $ab = 2; $abc = 3; $s = "${ab}cdefg"; var_dump($s);
ふむ…まぁ実験。
string(6) "2cdefg"
あ、でた。
調べた。
http://www.php.net/manual/ja/language.types.string.php
// うまく動作します。出力: This is fantastic
echo "This is {$great}";
echo "This is ${great}";
なるほろ。
ただ、上述URIのサンプルコードを眺めるに
// 動作します
echo "This square is {$square->width}00 centimeters broad.";
// 動作します。クォートしたキーを使う場合は、波括弧構文を使わなければなりません
echo "This works: {$arr['key']}";
// 動作します
echo "This works: {$arr[4][3]}";
なんか全体的に「$を含めて波括弧に含めてる」なぁ。
配列とかの時に不具合でも起きるのかしらん?
実験。
<?php $awk['key'] = '000'; $s = "${awk['key']}cdefg"; var_dump($s);
string(8) "000cdefg"
あ、以外といけた。
ん…なんとなく「どっちでもいい」ように見えるなぁ。
おいちゃんの好みは「$を含めて波括弧の中」なんだけど、その辺はどうも「好みと好き好き」な気がしてきた。
ん?クラスは?
<?php class hoge { public $datum_; } $obj = new hoge(); $obj->datum_ = 10; $s = "${obj->datum_}cdefg"; var_dump($s);
Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in /home/gallu/t.php on line 10
あぁこのパターンでエラーになるのか。
一応念のため。
<?php class hoge { public $datum_; } $obj = new hoge(); $obj->datum_ = 10; $s = "{$obj->datum_}cdefg"; var_dump($s);
string(7) "10cdefg"
まぁそうだねぇ。
ん…あんまり複雑なことしなきゃどっちでもいい気がするんだけど。
まぁ「$も波括弧ん中に入れておいた方が汎用的」な、気は、する。
とはいえこんな構文で「ンな複雑なこと」やっても、ってのがまず第一にあるとは思うんだけど(苦笑