Skip to content

Commit 2f6c425

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

File tree

4 files changed

+34
-0
lines changed

4 files changed

+34
-0
lines changed

ext/reflection/php_reflection.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,6 +1790,20 @@ 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+
if (zend_parse_parameters_none() == FAILURE) {
1800+
RETURN_THROWS();
1801+
}
1802+
GET_REFLECTION_OBJECT_PTR(fptr);
1803+
RETURN_BOOL((fptr->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) == 0);
1804+
}
1805+
/* }}} */
1806+
17931807
/* {{{ Returns whether this function has been disabled or not */
17941808
ZEND_METHOD(ReflectionFunction, isDisabled)
17951809
{

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 & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ 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+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunction_isAnonymous, 0, 0, _IS_BOOL, 0)
95+
ZEND_END_ARG_INFO()
96+
9497
#define arginfo_class_ReflectionFunction_isDisabled arginfo_class_ReflectionFunctionAbstract_inNamespace
9598

9699
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ReflectionFunction_invoke, 0, 0, IS_MIXED, 0)
@@ -630,6 +633,7 @@ ZEND_METHOD(ReflectionFunctionAbstract, getTentativeReturnType);
630633
ZEND_METHOD(ReflectionFunctionAbstract, getAttributes);
631634
ZEND_METHOD(ReflectionFunction, __construct);
632635
ZEND_METHOD(ReflectionFunction, __toString);
636+
ZEND_METHOD(ReflectionFunction, isAnonymous);
633637
ZEND_METHOD(ReflectionFunction, isDisabled);
634638
ZEND_METHOD(ReflectionFunction, invoke);
635639
ZEND_METHOD(ReflectionFunction, invokeArgs);
@@ -878,6 +882,7 @@ static const zend_function_entry class_ReflectionFunctionAbstract_methods[] = {
878882
static const zend_function_entry class_ReflectionFunction_methods[] = {
879883
ZEND_ME(ReflectionFunction, __construct, arginfo_class_ReflectionFunction___construct, ZEND_ACC_PUBLIC)
880884
ZEND_ME(ReflectionFunction, __toString, arginfo_class_ReflectionFunction___toString, ZEND_ACC_PUBLIC)
885+
ZEND_ME(ReflectionFunction, isAnonymous, arginfo_class_ReflectionFunction_isAnonymous, ZEND_ACC_PUBLIC)
881886
ZEND_ME(ReflectionFunction, isDisabled, arginfo_class_ReflectionFunction_isDisabled, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
882887
ZEND_ME(ReflectionFunction, invoke, arginfo_class_ReflectionFunction_invoke, ZEND_ACC_PUBLIC)
883888
ZEND_ME(ReflectionFunction, invokeArgs, arginfo_class_ReflectionFunction_invokeArgs, ZEND_ACC_PUBLIC)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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->isAnonyous());
10+
?>
11+
--EXPECTF--
12+
bool(true)
13+
bool(false)

0 commit comments

Comments
 (0)