]> granicus.if.org Git - php/commitdiff
- MFH: Fixed bug #45682 (Unable to var_dump(DateInterval)).
authorDerick Rethans <derick@php.net>
Sun, 3 May 2009 18:46:28 +0000 (18:46 +0000)
committerDerick Rethans <derick@php.net>
Sun, 3 May 2009 18:46:28 +0000 (18:46 +0000)
NEWS
ext/date/php_date.c
ext/date/tests/bug45682.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 4e845e46b01cd78311c3e7ef685f3a8e205ac979..c8a92d97d13d89abb6df0a7afa57c14a632c8cc3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -117,6 +117,7 @@ PHP                                                                        NEWS
 - Fixed bug #46048 (SimpleXML top-level @attributes not part of iterator).
   (David C.)
 - Fixed bug #45877 (Array key '2147483647' left as string). (Matt)
+- Fixed bug #45682 (Unable to var_dump(DateInterval)). (Derick)
 - Fixed bug #45432 (PDO: persistent connection leak). (Felipe)
 - Fixed bug #43831 ($this gets mangled when extending PDO with persistent 
   connection). (Felipe)
index 4f2af1fb87aa07ffaaac4161f4fe886b7218302a..b4017ba995d1cd311096bba89fe12f5e344bf880 100644 (file)
@@ -548,6 +548,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);
@@ -1951,6 +1952,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;
@@ -2178,6 +2180,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;
diff --git a/ext/date/tests/bug45682.phpt b/ext/date/tests/bug45682.phpt
new file mode 100644 (file)
index 0000000..d8bbfc5
--- /dev/null
@@ -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) {
+  ["y"]=>
+  int(0)
+  ["m"]=>
+  int(0)
+  ["d"]=>
+  int(3)
+  ["h"]=>
+  int(0)
+  ["i"]=>
+  int(0)
+  ["s"]=>
+  int(0)
+  ["invert"]=>
+  int(0)
+  ["days"]=>
+  int(3)
+}