Skip to content

Commit aad0d26

Browse files
committed
Fix bug #81200 ReflectionMethod::isStatic belongs on ReflectionFunctionAbstract
1 parent 4957b7c commit aad0d26

File tree

5 files changed

+47
-16
lines changed

5 files changed

+47
-16
lines changed

NEWS

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.1.0alpha3
44

5-
- Core
5+
- Core:
66
. Fixed bug #81202 (powerpc64 build fails on fibers). (krakjoe)
77

8+
- Reflection:
9+
. Fixed bug #81200 (no way to determine if Closure is static). (krakjoe)
10+
811
24 Jun 2021, PHP 8.1.0alpha2
912

1013
- Core:

ext/reflection/php_reflection.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3398,13 +3398,6 @@ ZEND_METHOD(ReflectionMethod, isProtected)
33983398
}
33993399
/* }}} */
34003400

3401-
/* {{{ Returns whether this method is static */
3402-
ZEND_METHOD(ReflectionMethod, isStatic)
3403-
{
3404-
_function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_STATIC);
3405-
}
3406-
/* }}} */
3407-
34083401
/* {{{ Returns whether this function is deprecated */
34093402
ZEND_METHOD(ReflectionFunctionAbstract, isDeprecated)
34103403
{
@@ -3426,6 +3419,13 @@ ZEND_METHOD(ReflectionFunctionAbstract, isVariadic)
34263419
}
34273420
/* }}} */
34283421

3422+
/* {{{ Returns whether this function is static */
3423+
ZEND_METHOD(ReflectionFunctionAbstract, isStatic)
3424+
{
3425+
_function_check_flag(INTERNAL_FUNCTION_PARAM_PASSTHRU, ZEND_ACC_STATIC);
3426+
}
3427+
/* }}} */
3428+
34293429
/* {{{ Returns whether this function is defined in namespace */
34303430
ZEND_METHOD(ReflectionFunctionAbstract, inNamespace)
34313431
{

ext/reflection/php_reflection.stub.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public function isGenerator(): bool {}
4444
/** @tentative-return-type */
4545
public function isVariadic(): bool {}
4646

47+
/** @tentative-return-type */
48+
public function isStatic(): bool {}
49+
4750
/** @tentative-return-type */
4851
public function getClosureThis(): ?object {}
4952

@@ -175,9 +178,6 @@ public function isAbstract(): bool {}
175178
/** @tentative-return-type */
176179
public function isFinal(): bool {}
177180

178-
/** @tentative-return-type */
179-
public function isStatic(): bool {}
180-
181181
/** @tentative-return-type */
182182
public function isConstructor(): bool {}
183183

ext/reflection/php_reflection_arginfo.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: b7cb399903fb1965ba6294c4dcf9364539e93b5b */
2+
* Stub hash: e66c459f457f71cb677a93652364ab7e81be8b0e */
33

44
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Reflection_getModifierNames, 0, 1, IS_ARRAY, 0)
55
ZEND_ARG_TYPE_INFO(0, modifiers, IS_LONG, 0)
@@ -23,6 +23,8 @@ ZEND_END_ARG_INFO()
2323

2424
#define arginfo_class_ReflectionFunctionAbstract_isVariadic arginfo_class_ReflectionFunctionAbstract_inNamespace
2525

26+
#define arginfo_class_ReflectionFunctionAbstract_isStatic arginfo_class_ReflectionFunctionAbstract_inNamespace
27+
2628
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunctionAbstract_getClosureThis, 0, 0, IS_OBJECT, 1)
2729
ZEND_END_ARG_INFO()
2830

@@ -139,8 +141,6 @@ ZEND_END_ARG_INFO()
139141

140142
#define arginfo_class_ReflectionMethod_isFinal arginfo_class_ReflectionFunctionAbstract_inNamespace
141143

142-
#define arginfo_class_ReflectionMethod_isStatic arginfo_class_ReflectionFunctionAbstract_inNamespace
143-
144144
#define arginfo_class_ReflectionMethod_isConstructor arginfo_class_ReflectionFunctionAbstract_inNamespace
145145

146146
#define arginfo_class_ReflectionMethod_isDestructor arginfo_class_ReflectionFunctionAbstract_inNamespace
@@ -600,6 +600,7 @@ ZEND_METHOD(ReflectionFunctionAbstract, isInternal);
600600
ZEND_METHOD(ReflectionFunctionAbstract, isUserDefined);
601601
ZEND_METHOD(ReflectionFunctionAbstract, isGenerator);
602602
ZEND_METHOD(ReflectionFunctionAbstract, isVariadic);
603+
ZEND_METHOD(ReflectionFunctionAbstract, isStatic);
603604
ZEND_METHOD(ReflectionFunctionAbstract, getClosureThis);
604605
ZEND_METHOD(ReflectionFunctionAbstract, getClosureScopeClass);
605606
ZEND_METHOD(ReflectionFunctionAbstract, getClosureUsedVariables);
@@ -642,7 +643,6 @@ ZEND_METHOD(ReflectionMethod, isPrivate);
642643
ZEND_METHOD(ReflectionMethod, isProtected);
643644
ZEND_METHOD(ReflectionMethod, isAbstract);
644645
ZEND_METHOD(ReflectionMethod, isFinal);
645-
ZEND_METHOD(ReflectionMethod, isStatic);
646646
ZEND_METHOD(ReflectionMethod, isConstructor);
647647
ZEND_METHOD(ReflectionMethod, isDestructor);
648648
ZEND_METHOD(ReflectionMethod, getClosure);
@@ -839,6 +839,7 @@ static const zend_function_entry class_ReflectionFunctionAbstract_methods[] = {
839839
ZEND_ME(ReflectionFunctionAbstract, isUserDefined, arginfo_class_ReflectionFunctionAbstract_isUserDefined, ZEND_ACC_PUBLIC)
840840
ZEND_ME(ReflectionFunctionAbstract, isGenerator, arginfo_class_ReflectionFunctionAbstract_isGenerator, ZEND_ACC_PUBLIC)
841841
ZEND_ME(ReflectionFunctionAbstract, isVariadic, arginfo_class_ReflectionFunctionAbstract_isVariadic, ZEND_ACC_PUBLIC)
842+
ZEND_ME(ReflectionFunctionAbstract, isStatic, arginfo_class_ReflectionFunctionAbstract_isStatic, ZEND_ACC_PUBLIC)
842843
ZEND_ME(ReflectionFunctionAbstract, getClosureThis, arginfo_class_ReflectionFunctionAbstract_getClosureThis, ZEND_ACC_PUBLIC)
843844
ZEND_ME(ReflectionFunctionAbstract, getClosureScopeClass, arginfo_class_ReflectionFunctionAbstract_getClosureScopeClass, ZEND_ACC_PUBLIC)
844845
ZEND_ME(ReflectionFunctionAbstract, getClosureUsedVariables, arginfo_class_ReflectionFunctionAbstract_getClosureUsedVariables, ZEND_ACC_PUBLIC)
@@ -896,7 +897,6 @@ static const zend_function_entry class_ReflectionMethod_methods[] = {
896897
ZEND_ME(ReflectionMethod, isProtected, arginfo_class_ReflectionMethod_isProtected, ZEND_ACC_PUBLIC)
897898
ZEND_ME(ReflectionMethod, isAbstract, arginfo_class_ReflectionMethod_isAbstract, ZEND_ACC_PUBLIC)
898899
ZEND_ME(ReflectionMethod, isFinal, arginfo_class_ReflectionMethod_isFinal, ZEND_ACC_PUBLIC)
899-
ZEND_ME(ReflectionMethod, isStatic, arginfo_class_ReflectionMethod_isStatic, ZEND_ACC_PUBLIC)
900900
ZEND_ME(ReflectionMethod, isConstructor, arginfo_class_ReflectionMethod_isConstructor, ZEND_ACC_PUBLIC)
901901
ZEND_ME(ReflectionMethod, isDestructor, arginfo_class_ReflectionMethod_isDestructor, ZEND_ACC_PUBLIC)
902902
ZEND_ME(ReflectionMethod, getClosure, arginfo_class_ReflectionMethod_getClosure, ZEND_ACC_PUBLIC)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
Test closure isStatic
3+
--FILE--
4+
<?php
5+
class Foo {
6+
public static function bar(){}
7+
public function baz() {}
8+
9+
public function qux() {
10+
return static function(){};
11+
}
12+
}
13+
14+
$foo = new Foo;
15+
16+
var_dump(
17+
(new ReflectionFunction(function(){}))->isStatic(),
18+
(new ReflectionFunction(static function(){}))->isStatic(),
19+
(new ReflectionFunction($foo->qux()))->isStatic(),
20+
(new ReflectionMethod($foo, 'bar'))->isStatic(),
21+
(new ReflectionMethod($foo, 'baz'))->isStatic(),);
22+
?>
23+
--EXPECT--
24+
bool(false)
25+
bool(true)
26+
bool(true)
27+
bool(true)
28+
bool(false)

0 commit comments

Comments
 (0)