文字列を三次元以上の配列とみなしてisset()すると「Fatal error: Cannot use string offset as an array」が発生しました。
PHP5.2.5/5.1.6で試しました。
<?php $a = ""; var_dump(isset($a['0']['0'])); // 2次元は可 var_dump(isset($a['0']['0']['0'])); // Fatal error // empty も同じ var_dump(empty($a['0']['0'])); // 2次元は可 var_dump(empty($a['0']['0']['0'])); // Fatal error ?>
$aは空文字でも”hoge”でも同じようにNGでした。ちなみに$aが文字列の時に発生するもので、数値やnullでは問題ありません。
文字列変数に[]を使うとインデックスで指定したオフセットの文字へアクセスできるので、これが影響しているのかもしれません。(ただPHP4.3.9ではこのエラーは発生しませんでした。)
これ自体は単にis_array()でチェックすれば良い話なのでそれほど大した事ではないです。
<?php $a = ""; if (is_array($a)) { var_dump(isset($a['0']['0']['0'])); } ?>
実はこのエラーはCakePHP1.2-prebetaで稼働しているシステムをCakePHP1.2-betaのフレームワークに移行した際に気づきました(Helper#value()で発生)。Helperを上記のように書き換えれば問題無いのですが、フレームワークにあまり手は入れたくないので解決策を調査中です;-)
[2008/02/12追記]
CakePHP1.2-betaの問題は自作Component#beforeRender()での変換処理に問題があったことが原因でした。NULLな値を空文字に変換してしまっていました。これまでは上手く動いていたのが、1.2-betaのヘルパーで顕在化したというところですね。いやはや;-)。
- Newer: 第2回CakePHP勉強会も盛り上がりました!
- Older: [告知] 第2回CakePHP勉強会の申込を開始しました。
コメント (Close):1
- YUI 08-02-23 (土) 19:51
-
はじめまして。PHP勉強中にたどり着きました!
ふと気になったのですが
コードビューでのプレーンテキストとハイライトテキストの切り替え
ハイライトのスペルはHILITEで良いんでしょうか?
トラックバック:0
- このエントリーのトラックバックURL
- /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