- Fixed bug #45682 (Unable to var_dump(DateInterval)).

This commit is contained in:
Derick Rethans 2009-05-03 18:45:06 +00:00
parent e630833ba6
commit 9efb9daffe
2 changed files with 62 additions and 0 deletions

View File

@ -555,6 +555,7 @@ static zend_object_value date_object_clone_period(zval *this_ptr TSRMLS_DC);
static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC);
static HashTable *date_object_get_properties(zval *object TSRMLS_DC);
static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC);
zval *date_interval_read_property(zval *object, zval *member, int type TSRMLS_DC);
void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS_DC);
@ -2063,6 +2064,7 @@ static void date_register_classes(TSRMLS_D)
date_object_handlers_interval.clone_obj = date_object_clone_interval;
date_object_handlers_interval.read_property = date_interval_read_property;
date_object_handlers_interval.write_property = date_interval_write_property;
date_object_handlers_interval.get_properties = date_object_get_properties_interval;
INIT_CLASS_ENTRY(ce_period, "DatePeriod", date_funcs_period);
ce_period.create_object = date_object_new_period;
@ -2292,6 +2294,34 @@ static zend_object_value date_object_clone_interval(zval *this_ptr TSRMLS_DC)
return new_ov;
}
static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC)
{
HashTable *props;
zval *zv;
php_interval_obj *intervalobj;
intervalobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC);
props = intervalobj->std.properties;
#define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \
MAKE_STD_ZVAL(zv); \
ZVAL_LONG(zv, intervalobj->diff->f); \
zend_hash_update(props, n, strlen(n) + 1, &zv, sizeof(zval), NULL);
PHP_DATE_INTERVAL_ADD_PROPERTY("y", y);
PHP_DATE_INTERVAL_ADD_PROPERTY("m", m);
PHP_DATE_INTERVAL_ADD_PROPERTY("d", d);
PHP_DATE_INTERVAL_ADD_PROPERTY("h", h);
PHP_DATE_INTERVAL_ADD_PROPERTY("i", i);
PHP_DATE_INTERVAL_ADD_PROPERTY("s", s);
PHP_DATE_INTERVAL_ADD_PROPERTY("invert", invert);
PHP_DATE_INTERVAL_ADD_PROPERTY("days", days);
return props;
}
static inline zend_object_value date_object_new_period_ex(zend_class_entry *class_type, php_period_obj **ptr TSRMLS_DC)
{
php_period_obj *intern;

View File

@ -0,0 +1,32 @@
--TEST--
Bug #45682 (Unable to var_dump(DateInterval))
--INI--
date.timezone=UTC
--FILE--
<?php
$date = new DateTime("28-July-2008");
$other = new DateTime("31-July-2008");
$diff = date_diff($date, $other);
var_dump($diff);
--EXPECT--
object(DateInterval)#3 (8) {
[u"y"]=>
int(0)
[u"m"]=>
int(0)
[u"d"]=>
int(3)
[u"h"]=>
int(0)
[u"i"]=>
int(0)
[u"s"]=>
int(0)
[u"invert"]=>
int(0)
[u"days"]=>
int(3)
}