Bug #78895 [Opn->Ver]: Reflection detects abstract non-static class as abstract static

From: Date: Mon, 02 Dec 2019 09:04:08 +0000
Subject: Bug #78895 [Opn->Ver]: Reflection detects abstract non-static class as abstract static
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-223999@lists.php.net to get a copy of this message
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)

« previous php.bugs (#223999) next »