人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPを長らく扱ってきましたが、こんな結果になるはずがないですよね?
特定バージョンのバグかと思ったら複数の環境で起きてるのでびっくりした。
むしろこの仕様でいままで自分がつまづかなかったのが不思議です。
なにこれ?

<?php

$test1 = "ABCDE";
var_dump($test1['undefined']);

echo "<br>";

$test2 = "12345";
var_dump(isset($test2['undefined']));

echo "<br>";

echo PHP_VERSION;

?>

string(1) "A"
bool(true)
4.3.11/5.2.6 ※両方で確認

●質問者: Knoa
●カテゴリ:ウェブ制作
✍キーワード:echo PHP String バグ バージョン
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● krese
●60ポイント

http://jp.php.net/manual/ja/language.types.string.php

の「文字列への文字単位のアクセスと修正」にあるように

$str[42] のように、 角括弧を使用してゼロから始まるオフセットを指定すると、 文字列内の任意の文字にアクセスし、修正することが可能です。 つまり、文字列を文字の配列として考えるわけです。 波括弧の後に任意の文字をゼロから始まるオフセットで指定することにより、 文字列内の文字にアクセス/修正することが可能です。

となります。


文字列はすべて0として評価されるので、実行された結果のようになります。

$test1['aaa']

$test1[0]

$test1[1]

あたりを試してみると、わかりやすいかと思います。

◎質問者からの返答

動作としてはそれが正解かなぁという気はしてました。

ついカッとなって「はてな」してしまいましたが、そうするとisset()の使いどころには気をつけないとダメですね…。

今回はずばり、年月日が、year,month,dayの配列、または"2000-01-01 00:00:00"のような文字列で入る変数に対して、

if(isset($value['year'], $value['month'], $value['day']))

とやろうとしたんですが、is_array()も追加しないとダメな感じですかね。

キモいなぁ。そのひと手間を惜しむ考えのほうがキモイのかな。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ