Home > CakePHP | PHP > PHP Fatal error: Cannot use string offset as an array

PHP Fatal error: Cannot use string offset as an array

この記事の所要時間: 120

文字列を三次元以上の配列とみなしてisset()すると「Fatal error: Cannot use string offset as an array」が発生しました。

PHP5.2.5/5.1.6で試しました。

<?php
$a = "";
var_dump(isset($a&#91;'0'&#93;&#91;'0'&#93;)); // 2次元は可
var_dump(isset($a&#91;'0'&#93;&#91;'0'&#93;&#91;'0'&#93;)); // Fatal error

// empty も同じ
var_dump(empty($a&#91;'0'&#93;&#91;'0'&#93;)); // 2次元は可
var_dump(empty($a&#91;'0'&#93;&#91;'0'&#93;&#91;'0'&#93;)); // Fatal error
?>

$aは空文字でも”hoge”でも同じようにNGでした。ちなみに$aが文字列の時に発生するもので、数値やnullでは問題ありません。

文字列変数に[]を使うとインデックスで指定したオフセットの文字へアクセスできるので、これが影響しているのかもしれません。(ただPHP4.3.9ではこのエラーは発生しませんでした。)

これ自体は単にis_array()でチェックすれば良い話なのでそれほど大した事ではないです。

<?php
$a = "";
if (is_array($a)) {
  var_dump(isset($a&#91;'0'&#93;&#91;'0'&#93;&#91;'0'&#93;));
}
?>

実はこのエラーはCakePHP1.2-prebetaで稼働しているシステムをCakePHP1.2-betaのフレームワークに移行した際に気づきました(Helper#value()で発生)。Helperを上記のように書き換えれば問題無いのですが、フレームワークにあまり手は入れたくないので解決策を調査中です;-)

[2008/02/12追記]

CakePHP1.2-betaの問題は自作Component#beforeRender()での変換処理に問題があったことが原因でした。NULLな値を空文字に変換してしまっていました。これまでは上手く動いていたのが、1.2-betaのヘルパーで顕在化したというところですね。いやはや;-)。

Pocket

follow us in feedly

コメント (Close):1

YUI 08-02-23 (土) 19:51

はじめまして。PHP勉強中にたどり着きました!
ふと気になったのですが
コードビューでのプレーンテキストとハイライトテキストの切り替え
ハイライトのスペルはHILITEで良いんでしょうか?

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2008/02/php_cannot_use_string_offset_as_an_array.html/trackback
Listed below are links to weblogs that reference
PHP Fatal error: Cannot use string offset as an array from Shin x blog

Home > CakePHP | PHP > PHP Fatal error: Cannot use string offset as an array

検索
フィード
メタ情報

Return to page top