[PHP] 文字列中の波括弧記法が気持ち悪すぎる

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP] 文字列中の波括弧記法が気持ち悪すぎる

PHPでは、二重引用符 (") で括った文字列の中で、波括弧 ({}) を使って変数を展開できたりするわけだが、この波括弧記法があまりにも強力すぎて気持ち悪かったので書いてみる。

↓まずは普通の使い方。これは普通に便利。

echo "{$var} {$arr[0]} {$arr['key']} {$obj->name}";

↓メソッドを呼び出したパターン。ちょっと気持ち悪いけど便利。

echo "{$obj->getName()} {$obj->getCategory('all')}";

↓普通に式を埋め込めるのをいいことに、代入したり、グローバル関数を呼んでみたりした例。期待通りに動くが、だいぶ気持ち悪くなってきた。

echo "{$arr[$i = 1]} {$obj->{fn()}} {$obj->method((0 + 1) * 10 < time())}";

↓極めつけ。二重引用符を含めたパターン。これでも動く。最後の例とか、もはや何がなんだか。

echo "{$arr["key"]} {$obj->{"prefix_{$obj->method("{$arr[0]}")}_postfix"}[0]}";

何でこんなに柔軟なの?

と思って、PHPの処理系のソースを覗いてみて納得。どうやら、二重引用符中で {$ っていうトークンを見つけると、文字列としてのパースを終了して、スクリプトとしてのパースを開始するような仕様になっているみたい。だから、 {$ ... } で括られている中身は普通のPHPコードと同じ扱い。

うーむ、気持ち悪すぎる...

豆知識

波括弧記法の中は、PHPコードと同じように処理されるので、↓のコードはE_Noticeレベルのエラーが発生します。

echo "{$arr[key]}";

↓のように書けば、E_Noticeレベルのエラーは回避できます。

echo "$arr[key]";
echo "{$arr['key']}";

これも仕様としてはなかなか気持ちが悪い。

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/146-4625357d

トラックバック

コメント

このコメントは管理人のみ閲覧できます
  • 2012-04-09
  • by -
  • id:

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。