web-dev-qa-db-ja.com

PHP配列表記の中括弧

私はちょうど非常に奇妙なphpコードに出くわしました:

$oink{'pig'} = 1;
var_dump($oink);

$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */

配列のように機能しますが、マニュアルには記載されていません。これは何ですか?

34
Jauzsika

isマニュアルに記載されています。 {}[]§ ​​の代替構文です。

角括弧と中括弧の両方を使用できます交換可能配列要素にアクセスします(たとえば、$array[42]$array{42}は両方とも上記の例で同じことを行います)。

同じことが文字列にも当てはまります § ​​:

文字列内の文字は、$str[42]のように、角かっこを使用して文字列の後に目的の文字のゼロベースのオフセットを指定することでアクセスおよび変更できます。 この目的のために文字列を文字の配列と考えてください。 [...]

注:$str{42}同じ目的でのように、中括弧を使用して文字列にアクセスすることもできます。

34
Pacerier

ドキュメントに関するこのコメントによると、これは単なる別の表記法であり、おそらくPerl構文に似せて設計されています: http://www.php.net/manual/de/language.types.array.php#99015

更新:この回答が最初に投稿されたとき、PHPマニュアルには、この表記に関する公式情報はありませんでした。ただし、2014年には、上記のコメントが削除され、 Pacerierの回答によると のように、この表記はマニュアルに正式に記載されています。

4
Abenil

マニュアルに記載されていますが、あいまいです。

http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

一言で言えば、中括弧は1文字のみにアクセスします(完全な文字列を追加してみると、最初の文字のみが返されることがわかります)。また、非推奨であるため、使用を避けます。

3
Mike Bobbitt

PHP 7.4以降の中括弧は、配列にアクセスするために非推奨になりました。

https://wiki.php.net/rfc/deprecate_curly_braces_array_access

2
jbrahy