お詫び
PhpStormでシングル・ダブルクォーテーションを変換するPHP 1Up! プラグイン - Qiita
適切に分けることもできる。
適切に分かれません。
よく見ると背景色が変わって警告が出ている。
結論
そもそも${hoge}
という書き方はない。…多分。
ただし、文字列リテラル内ではセーフ。
文字列リテラル外だと、
{$hoge}
はシンタックスエラー。
${hoge}
はhogeのみが解釈され、定数として扱われ、
$定数の値
という変数を探す。
コード
<?php
ini_set('display_error', 'On');
error_reporting(-1);
$hr = function() {
static $i = 1;
echo "\n\n" . $i++ . "\n-----\n";
};
$a = 'Z';
$hr();
echo "cb$a";
$hr();
echo "cb{$a}a";
$hr();
echo "cb${a}a";
$hr();
echo $a;
$hr();
echo ${a};
$hr();
//echo {$a}; //PHP Parse error: syntax error, unexpected 'echo' (T_ECHO) in /tmp/brace.php on line 36
一部ネタバレしているが、
実行結果
1
-----
cbZ
2
-----
cbZa
3
-----
cbZa
4
-----
Z
5
-----
PHP Notice: Use of undefined constant a - assumed 'a' in /tmp/brace.php on line 32
Z
6
-----
${a}
はa
が定数扱いとなり、未定義定数は変数名として扱われるPHPの親切機能により$a
と解釈される?
$$a
で$Z
にはならないもよう?
ini_set('display_error', 'On');
error_reporting(-1);
$a = 'Z';
define("a", '定数だよー!');
echo "\n";
echo ${a};
echo "\n";
PHP Notice: Undefined variable: 定数だよー! in /tmp/const.php on line 12
んんん??
<?php
ini_set('display_error', 'On');
error_reporting(-1);
$a = 'Z';
define("a", '定数だよー!');
$定数だよー! = 'なんだよー!';
echo "\n";
echo ${a};
echo "\n";
なんだよー!
なんだよー!
どうして最初のコードでUndefined variable
が出ないのだ!
冗長だからか!
そもそも間違った書き方だから知らん!