summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--ext/reflection/php_reflection.c26
-rw-r--r--ext/reflection/tests/bug77772.phpt22
3 files changed, 37 insertions, 14 deletions
diff --git a/NEWS b/NEWS
index e35e2d405e..dbce1af299 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2019, PHP 7.2.18
+- Reflection:
+ . Fixed bug #77772 (ReflectionClass::getMethods(null) doesn't work). (Nikita)
+
04 Apr 2019, PHP 7.2.17
- Core:
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index f1096fbe81..80e508c175 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -4246,15 +4246,14 @@ ZEND_METHOD(reflection_class, getMethods)
reflection_object *intern;
zend_class_entry *ce;
zend_long filter = 0;
- int argc = ZEND_NUM_ARGS();
+ zend_bool filter_is_null = 1;
METHOD_NOTSTATIC(reflection_class_ptr);
- if (argc) {
- if (zend_parse_parameters(argc, "|l", &filter) == FAILURE) {
- return;
- }
- } else {
- /* No parameters given, default to "return all" */
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!", &filter, &filter_is_null) == FAILURE) {
+ return;
+ }
+
+ if (filter_is_null) {
filter = ZEND_ACC_PPP_MASK | ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL | ZEND_ACC_STATIC;
}
@@ -4442,15 +4441,14 @@ ZEND_METHOD(reflection_class, getProperties)
reflection_object *intern;
zend_class_entry *ce;
zend_long filter = 0;
- int argc = ZEND_NUM_ARGS();
+ zend_bool filter_is_null = 1;
METHOD_NOTSTATIC(reflection_class_ptr);
- if (argc) {
- if (zend_parse_parameters(argc, "|l", &filter) == FAILURE) {
- return;
- }
- } else {
- /* No parameters given, default to "return all" */
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l!", &filter, &filter_is_null) == FAILURE) {
+ return;
+ }
+
+ if (filter_is_null) {
filter = ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC;
}
diff --git a/ext/reflection/tests/bug77772.phpt b/ext/reflection/tests/bug77772.phpt
new file mode 100644
index 0000000000..07696210c5
--- /dev/null
+++ b/ext/reflection/tests/bug77772.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #77772: ReflectionClass::getMethods(null) doesn't work
+--FILE--
+<?php
+
+class Test {
+ public $prop;
+ public function method() {}
+}
+
+$rc = new ReflectionClass(Test::class);
+foreach ($rc->getMethods(null) as $method) {
+ var_dump($method->getName());
+}
+foreach ($rc->getProperties(null) as $prop) {
+ var_dump($prop->getName());
+}
+
+?>
+--EXPECT--
+string(6) "method"
+string(4) "prop"