これは、PHPのバグ #49382 として報告されています。
PHP 5.3 では、デバッグを支援するために、print_r()
のインスタンスが保持する基になるタイムスタンプ値の詳細を表示できる内部機能が追加されました。DateTime
この変更の副作用は、オブジェクトがテキストにダンプされるときに、これらのファントム パブリック プロパティがインスタンスに追加されることです。
リフレクションを使用してこれらのプロパティにアクセスすることで同じ効果を得ることができます。プロパティにアクセスする必要がある場合は、リフレクションを使用する方法が適しているため、エラーは発生しません。
ただし、これらのプロパティを実際に使用するべきではないことに注意してください。これらのプロパティはオブジェクトのメンバーとして定義されていないため、将来の PHP バージョンで同じデータを保持し続ける (または存在する) という保証はありません。情報にアクセスする必要がある場合は、代わりに API の一部として定義されている次のメソッドを使用します。
// $obj->date
$obj->format('Y-m-d H:i:s');
// $obj->timezone
$obj->getTimezone()->getName();
// or...
$obj->getTimezone()->getOffset();
// or...
$obj->getTimezone()->listAbbreviations(); // returns an array, so may need
// further processing to be of use
注意: timezone_type
PHP API を介してプロパティにアクセスすることはできません。これは内部値であり、ユーザーランドでは役に立ちません。これはtimezone
、オブジェクトがダンプされるときに保持される文字列のタイプを記述するためです。つまり、上記のコード サンプルでタイムゾーン情報を取得する 3 つのメソッドの 1 つです。完全を期すために、可能な値は次のように定義されています。
値 | タイプ | ユーザーランド相当
------+--------------------------------------+---------------------------------- ---------------
1 | 時間オフセット | DateTimeZone::getOffset()
2 | タイムゾーンの略語 | DateTimeZone::listAbbreviations()
3 | タイムゾーン識別子 | DateTimeZone::getName()