Bug #78895 [Opn->Ver]: Reflection detects abstract non-static class as abstract static
Edit report at https://bugs.php.net/bug.php?id=78895&edit=1
ID: 78895
Updated by: cmb@php.net
Reported by: abashurov at plesk dot com
Summary: Reflection detects abstract non-static class as
abstract static
-Status: Open
+Status: Verified
Type: Bug
-Package: Reflection related
+Package: Scripting Engine problem
Operating System: All
PHP Version: 7.4.0
-Assigned To:
+Assigned To: dmitry
Block user comment: N
Private report: N
New Comment:
Commit 0fbd2e6[1] renumbered the ZEND_ACC_* flags, and now
ZEND_ACC_IMPLICIT_ABSTRACT_CLASS has the same value as
ZEND_ACC_STATIC. The former is set, because the class has an
abstract method; if it had not, results would be correct[2].
Dmitry, could you please have a look?
[1] <http://git.php.net/?p=php-src.git;a=commit;h=0fbd2e6a168a5cfacec6c44f4c179879a52428f3>
[2] <https://3v4l.org/qDEpu>
Previous Comments:
------------------------------------------------------------------------
[2019-12-02 08:13:01] abashurov at plesk dot com
Description:
------------
Initially reproduced on Arch Linux and Windows Server 2016:
php -v
PHP 7.4.0 (cli) (built: Nov 30 2019 10:43:49) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.0, Copyright (c), by Zend Technologies
with Xdebug v2.8.0, Copyright (c) 2002-2019, by Derick Rethans
php.exe -v
PHP 7.4.0 (cli) (built: Nov 27 2019 10:13:59) ( NTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.0, Copyright (c), by Zend Technologies
As 3v4l shows, this behavior is exclusive to PHP 7.4: https://3v4l.org/rEqh2
Test script:
---------------
<?php
abstract class Foo
{
abstract public function Bar();
}
$ref = new ReflectionClass(Foo::class);
var_dump(Reflection::getModifierNames($ref->getModifiers()));
Expected result:
----------------
Calling getModifiers on a non-static class does not detect it as static
Actual result:
--------------
Calling getModifiers on a non-static class detects it as static
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78895&edit=1
Thread (5 messages)