summaryrefslogtreecommitdiff
path: root/ext/reflection
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-03-22 12:40:21 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-03-22 12:41:02 +0100
commit620a753185e575c8d48779764f376f6227b6e293 (patch)
tree1635e1af08b95daf0b0c64b5a4e7d6238fdff81b /ext/reflection
parent5c8d69bf6fde2bbb3d6c168833bc9a70f0a5bc1f (diff)
parentda35fa2cb8d454c8e797067e28e647030a5fe5df (diff)
downloadphp-git-620a753185e575c8d48779764f376f6227b6e293.tar.gz
Merge branch 'PHP-7.2' into PHP-7.3
Diffstat (limited to 'ext/reflection')
-rw-r--r--ext/reflection/php_reflection.c18
-rw-r--r--ext/reflection/tests/bug77772.phpt22
2 files changed, 36 insertions, 4 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 748f5b3f08..2fa073cbea 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -4191,12 +4191,17 @@ ZEND_METHOD(reflection_class, getMethods)
{
reflection_object *intern;
zend_class_entry *ce;
- zend_long filter = ZEND_ACC_PPP_MASK | ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL | ZEND_ACC_STATIC;
+ zend_long filter = 0;
+ zend_bool filter_is_null = 1;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &filter) == FAILURE) {
+ 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;
+ }
+
GET_REFLECTION_OBJECT_PTR(ce);
array_init(return_value);
@@ -4377,11 +4382,16 @@ ZEND_METHOD(reflection_class, getProperties)
{
reflection_object *intern;
zend_class_entry *ce;
- zend_long filter = ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC;
+ zend_long filter = 0;
+ zend_bool filter_is_null = 1;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &filter) == FAILURE) {
+ 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;
+ }
GET_REFLECTION_OBJECT_PTR(ce);
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"