5
2

PHP のエラーメッセージ Cannot access offset of type string on string in ...

Last updated at Posted at 2021-09-24

エラーメッセージの意味がよくわからなくて苦労したので、備忘録として。(ネットで記事が見つからなくて困りました。特に日本語のもの。)
この記事は、PHP8.0 でのものですが、たぶん、もっと以前のバージョンでも同様です。

メッセージの意味

このエラーメッセージは、
「文字列に対して【文字列型のオフセット】でアクセスすることはできません!」
という意味です。

エラーの背景

PHPでは、配列に対して[int|string]型の「キー」を使って配列の要素にアクセスできると同時に、文字列に対しても、[int]型の「オフセット」と呼ばれる方法で、文字列中の特定の文字にアクセスすることができます。

(例)
1.配列の要素にアクセスする

以下の例では、$arr[0]xyz$arr['イ']1 となります。

$arr = [
   0   => 'xyz',
   1   => 'abc',
  'イ' => 1,
  'ロ' => 2,
  'ハ' => 3
];

echo $arr[0];    // -> xyz
echo $arr['イ']; // -> 1

2.文字列の一部にアクセスする

以下の例では、$str[0]a$str[1]b となります。

$str = 'abcde'; // (訂正)以前は'あいうえお'でした。訂正してお詫びします。

echo $str[0]; // -> a
echo $str[1]; // -> b

エラーの原因

上の2.の例で、$str['イ'] などとすると、表題のエラーが発生します。(本来は、上の1.の例のような、「イ」キーを持つ配列の要素にアクセスしようとしていたのでしょう。)

$str = 'abcde';

echo $str['イ']; // -> Cannot access offset of type string on string in ...

つまり、配列の要素に「文字列型のキー」でアクセスしようとしていたのに、間違って、文字列(が格納されている変数)に対して「文字列型のオフセット」でアクセスしてしまい、表題のエラーが発生したものと推測されます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2