PHP の文字列中変数展開が奇妙だったのでメモ
環境
PHP v8.2
変数展開
"
(ダブルコーテーション)中に {$変数}
で変数展開が出来る
<?php $name = 'Ichigo'; echo "Hello, {$name}!"; // => "Hello, Ichigo!"
定数は展開できない
<?php define("ICHIGO", "Ichigo"); echo "Hello, {ICHIGO}!"; // => "Hello, {ICHIGO}!"
定数はそのまま出力される
関数も展開できない
<?php function name() { return 'Ichigo'; } echo "Hello, {name()}!"; // => "Hello, {name()}!" echo "Hello, {strtoupper('ichigo')}!"; // => Hello, {strtoupper('ichigo')}!
JSX や JavaScript のテンプレートリテラルみたいに関数を書いても文字列として出力されてしまう
関数を実行する変数なら展開できる!
<?php $_s = fn(string $s): string => $s; // 文字列を返す関数を引数にしてしまえばOK echo "Hello, {$_s(strtoupper("ichigo"))}!"; // => "Hello, ICHIGO!" // 定数もOK define("ICHIGO", "Ichigo"); echo "Hello, {$_s(ICHIGO)}!"; // => "Hello, Ichigo!"
仕様がぽわぷりぃ〜
おわり
[参考]