Bug->Doc #81675 [Opn]: Undocumented change in get_class_vars behaviour with static properties in 8.1

[email protected] Tue, 30 Nov 2021 12:21:28 +0000
Newsgroups php.doc.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=81675&edit=1

 ID:                 81675
 Updated by:         [email protected]
 Reported by:        diede at yoast dot com
 Summary:            Undocumented change in get_class_vars behaviour with
                     static properties in 8.1
 Status:             Open
-Type:               Bug
+Type:               Documentation Problem
-Package:            *General Issues
+Package:            Scripting Engine problem
 PHP Version:        8.1.0
 Block user comment: N
 Private report:     N

 New Comment:

3v4l.org runs without OPcache.  With OPcache enabled, you already
got the same result as with PHP 8.1.  This inconsistency[1] has
now been fixed[2]; I'm not sure whether this should be documented,
given that OPcache is likely always enabled in production
environments at least.

[1] <https://bugs.php.net/bug.php?id=80821>
[2] <https://github.com/php/php-src/commit/3eb97a456648c739533d92c81102cb919eab01c9>


Previous Comments:
------------------------------------------------------------------------
[2021-11-30 10:56:38] diede at yoast dot com

Description:
------------
I have a feeling that `get_class_vars()` received a bugfix. Previously it included the current value of a static property, but now returns the default/initial value instead. This now matches the documentation, but the behaviour of previous PHP versions didn't match the documentation.

I can't find anything in the changelogs, docs and RFCs. Here's where we looked:
- https://github.com/php/php-src/blob/php-8.1.0/UPGRADING
- https://www.php.net/manual/en/migration81.php
- https://www.php.net/manual/en/function.get-class-vars.php
- https://wiki.php.net/rfc#php_81
- https://github.com/php/php-src/blob/php-8.1.0/NEWS


This could at the very least be considered a breaking change and should be documented.


Test script:
---------------
<?php
// https://3v4l.org/RjVk0
class MyClass {
    public static $myProperty;
}

MyClass::$myProperty = 3;
var_dump( get_class_vars( MyClass::class ) );

Expected result:
----------------
// Output for 7.3.0 - 7.3.33, 7.4.0 - 7.4.26, 8.0.0 - 8.0.13
array(1) {
  ["myProperty"]=>
  int(3)
}

Actual result:
--------------
// Output for 8.1.0
array(1) {
  ["myProperty"]=>
  NULL
}



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=81675&edit=1