非常に奇妙なPHPコードに出くわしました:
$oink{'pig'} = 1;
var_dump($oink);
$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */
配列のように機能しますが、マニュアルのどこにも言及されていません。これは何ですか?
それはマニュアルに記載されています。は、 § 角括弧構文による配列要素へのアクセス{}
の代替構文にすぎません。このメソッドは PHP 7.4.0 で廃止され、PHP 8.0.0 でサポートされなくなりました。[]
ノート:
PHP 8.0.0 より前では、配列要素にアクセスするために角括弧と中括弧を同じ意味で使用できました (たとえば、上の例では $array[42] と $array{42} はどちらも同じことを行います)。中括弧構文は PHP 7.4.0 で非推奨となり、PHP 8.0.0 でサポートされなくなりました。
同じことが文字列にも当てはまります§ 文字列へのアクセスと文字による変更:
のように、角かっこを使用して文字列の後に目的の文字のゼロベースのオフセットを指定することにより、文字列内の文字にアクセスして変更できます
$str[42]
。この目的では、文字列を文字の配列と考えてください。[...]注: PHP 8.0.0 より前では、同じ目的で、$str{42} のように中括弧を使用して文字列にアクセスすることもできました。この中括弧構文は PHP 7.4.0 で非推奨となり、PHP 8.0.0 でサポートされなくなりました。
ドキュメントに関するこのコメントによると、これはおそらく Perl 構文に似せて設計された別の表記法です: http://www.php.net/manual/de/language.types.array.php#99015
更新:この回答が最初に投稿されたとき、PHP マニュアルにはこの表記に関する公式情報はありませんでした。ただし、2014 年までに、上記のコメントは削除され、Pacerier の回答にあるように、この表記はマニュアルで公式に言及されています。
マニュアルに記載されていますが、あいまいです:
http://www.php.net/manual/en/language.types.string.php#language.types.string.substr
簡単に言うと、中括弧は 1 文字だけにアクセスします (完全な文字列を追加してみると、最初の文字だけが返されることがわかります)。これも非推奨なので、使用は避けたいと思います。