かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP 文字列中変数展開に関数は使えない?

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!"

仕様がぽわぷりぃ〜
おわり


[参考]