]> granicus.if.org Git - php/commitdiff
fix: bug72222 for PHP-5.6 reflection export of array consts
authornikita2206 <inefedor@gmail.com>
Sun, 15 May 2016 23:58:21 +0000 (02:58 +0300)
committerNikita Popov <nikic@php.net>
Wed, 13 Jul 2016 19:39:55 +0000 (21:39 +0200)
ext/reflection/php_reflection.c
ext/reflection/tests/ReflectionClass_export_array_bug72222.phpt [new file with mode: 0644]

index fbcf7a77ca8e3d4cd7501de8025235b947b8240f..5f15287237d5f78d75b19c26915aa7bd83dee8b8 100644 (file)
@@ -673,21 +673,26 @@ static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *in
 static void _const_string(string *str, char *name, zval *value, char *indent TSRMLS_DC)
 {
        char *type;
-       zval value_copy;
-       int use_copy;
-
        type = zend_zval_type_name(value);
 
-       zend_make_printable_zval(value, &value_copy, &use_copy);
-       if (use_copy) {
-               value = &value_copy;
-       }
+       if (Z_TYPE_P(value) == IS_ARRAY) {
+               string_printf(str, "%s    Constant [ %s %s ] { Array }\n",
+                                               indent, type, name);
+       } else {
+               zval value_copy;
+               int use_copy;
 
-       string_printf(str, "%s    Constant [ %s %s ] { %s }\n",
-                                       indent, type, name, Z_STRVAL_P(value));
+               zend_make_printable_zval(value, &value_copy, &use_copy);
+               if (use_copy) {
+                       value = &value_copy;
+               }
+
+               string_printf(str, "%s    Constant [ %s %s ] { %s }\n",
+                                               indent, type, name, Z_STRVAL_P(value));
 
-       if (use_copy) {
-               zval_dtor(value);
+               if (use_copy) {
+                       zval_dtor(value);
+               }
        }
 }
 /* }}} */
diff --git a/ext/reflection/tests/ReflectionClass_export_array_bug72222.phpt b/ext/reflection/tests/ReflectionClass_export_array_bug72222.phpt
new file mode 100644 (file)
index 0000000..e64dc97
--- /dev/null
@@ -0,0 +1,31 @@
+--TEST--
+ReflectionClass::export() - array constants
+--FILE--
+<?php
+Class A {
+       const A = 8;
+       const B = ["a", "b"];
+}
+ReflectionClass::export("A");
+?>
+--EXPECTF--
+Class [ <user> class A ] {
+  @@ %s 2-5
+
+  - Constants [2] {
+    Constant [ integer A ] { 8 }
+    Constant [ array B ] { Array }
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [0] {
+  }
+
+  - Methods [0] {
+  }
+}