Skip to content

Commit d2f6161

Browse files
Add ReflectionFunction::isAnonymous()
1 parent 9a90bd7 commit d2f6161

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

ext/reflection/php_reflection.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,6 +1790,19 @@ ZEND_METHOD(ReflectionFunctionAbstract, isUserDefined)
17901790
}
17911791
/* }}} */
17921792

1793+
/* {{{ Returns whether this function is an anonymous closure or not */
1794+
ZEND_METHOD(ReflectionFunction, isAnonymous)
1795+
{
1796+
reflection_object *intern;
1797+
zend_function *fptr;
1798+
1799+
ZEND_PARSE_PARAMETERS_NONE();
1800+
1801+
GET_REFLECTION_OBJECT_PTR(fptr);
1802+
RETURN_BOOL((fptr->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) == 0);
1803+
}
1804+
/* }}} */
1805+
17931806
/* {{{ Returns whether this function has been disabled or not */
17941807
ZEND_METHOD(ReflectionFunction, isDisabled)
17951808
{

ext/reflection/php_reflection.stub.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ public function __construct(Closure|string $function) {}
117117

118118
public function __toString(): string {}
119119

120+
public function isAnonymous(): bool {}
121+
120122
/**
121123
* @tentative-return-type
122124
* @deprecated ReflectionFunction can no longer be constructed for disabled functions

ext/reflection/php_reflection_arginfo.h

Lines changed: 5 additions & 1 deletion
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: 62fcf63d2f3e93537560c3a03e71fda131a31586 */
2+
* Stub hash: f06163b02a76ee7fa526e4662f015201e243743d */
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)
@@ -91,6 +91,8 @@ ZEND_END_ARG_INFO()
9191
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunction___toString, 0, 0, IS_STRING, 0)
9292
ZEND_END_ARG_INFO()
9393

94+
#define arginfo_class_ReflectionFunction_isAnonymous arginfo_class_ReflectionFunctionAbstract_hasTentativeReturnType
95+
9496
#define arginfo_class_ReflectionFunction_isDisabled arginfo_class_ReflectionFunctionAbstract_inNamespace
9597

9698
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunction_invoke, 0, 0, IS_MIXED, 0)
@@ -630,6 +632,7 @@ ZEND_METHOD(ReflectionFunctionAbstract, getTentativeReturnType);
630632
ZEND_METHOD(ReflectionFunctionAbstract, getAttributes);
631633
ZEND_METHOD(ReflectionFunction, __construct);
632634
ZEND_METHOD(ReflectionFunction, __toString);
635+
ZEND_METHOD(ReflectionFunction, isAnonymous);
633636
ZEND_METHOD(ReflectionFunction, isDisabled);
634637
ZEND_METHOD(ReflectionFunction, invoke);
635638
ZEND_METHOD(ReflectionFunction, invokeArgs);
@@ -878,6 +881,7 @@ static const zend_function_entry class_ReflectionFunctionAbstract_methods[] = {
878881
static const zend_function_entry class_ReflectionFunction_methods[] = {
879882
ZEND_ME(ReflectionFunction, __construct, arginfo_class_ReflectionFunction___construct, ZEND_ACC_PUBLIC)
880883
ZEND_ME(ReflectionFunction, __toString, arginfo_class_ReflectionFunction___toString, ZEND_ACC_PUBLIC)
884+
ZEND_ME(ReflectionFunction, isAnonymous, arginfo_class_ReflectionFunction_isAnonymous, ZEND_ACC_PUBLIC)
881885
ZEND_ME(ReflectionFunction, isDisabled, arginfo_class_ReflectionFunction_isDisabled, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
882886
ZEND_ME(ReflectionFunction, invoke, arginfo_class_ReflectionFunction_invoke, ZEND_ACC_PUBLIC)
883887
ZEND_ME(ReflectionFunction, invokeArgs, arginfo_class_ReflectionFunction_invokeArgs, ZEND_ACC_PUBLIC)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
ReflectionFunction::isAnonymous
3+
--FILE--
4+
<?php
5+
$rf = new ReflectionFunction(function() {});
6+
var_dump($rf->isAnonymous());
7+
8+
$rf = new ReflectionFunction('strlen');
9+
var_dump($rf->isAnonymous());
10+
11+
$rf = new ReflectionFunction(strlen(...));
12+
var_dump($rf->isAnonymous());
13+
?>
14+
--EXPECTF--
15+
bool(true)
16+
bool(false)
17+
bool(false)

0 commit comments

Comments
 (0)