エラーメッセージの意味がよくわからなくて苦労したので、備忘録として。(ネットで記事が見つからなくて困りました。特に日本語のもの。)
この記事は、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 ...
つまり、配列の要素に「文字列型のキー」でアクセスしようとしていたのに、間違って、文字列(が格納されている変数)に対して「文字列型のオフセット」でアクセスしてしまい、表題のエラーが発生したものと推測されます。