Merge branch 'PHP-8.4'

* PHP-8.4:
  Reflection: indicate final and abstract properties in string output
This commit is contained in:
Ilija Tovilo 2025-02-25 12:22:00 +01:00
commit ded8af57c4
No known key found for this signature in database
GPG key ID: 5050C66BFCD1015A
4 changed files with 91 additions and 1 deletions

View file

@ -942,6 +942,12 @@ static void _property_string(smart_str *str, zend_property_info *prop, const cha
if (!prop) {
smart_str_append_printf(str, "<dynamic> public $%s", prop_name);
} else {
if (prop->flags & ZEND_ACC_ABSTRACT) {
smart_str_appends(str, "abstract ");
}
if (prop->flags & ZEND_ACC_FINAL) {
smart_str_appends(str, "final ");
}
/* These are mutually exclusive */
switch (prop->flags & ZEND_ACC_PPP_MASK) {
case ZEND_ACC_PUBLIC:

View file

@ -0,0 +1,42 @@
--TEST--
Output of properties indicates if they are abstract
--FILE--
<?php
abstract class Demo {
abstract public $a { get; }
public $b;
}
$class = new ReflectionClass(Demo::class);
echo $class;
$propA = new ReflectionProperty(Demo::class, 'a');
echo $propA;
$propB = new ReflectionProperty(Demo::class, 'b');
echo $propB;
?>
--EXPECTF--
Class [ <user> <iterateable> abstract class Demo ] {
@@ %s %d-%d
- Constants [0] {
}
- Static properties [0] {
}
- Static methods [0] {
}
- Properties [2] {
Property [ abstract public $a ]
Property [ public $b = NULL ]
}
- Methods [0] {
}
}
Property [ abstract public $a ]
Property [ public $b = NULL ]

View file

@ -26,7 +26,7 @@ bool(true)
bool(false)
bool(true)
bool(false)
Property [ public private(set) int $bar ]
Property [ final public private(set) int $bar ]
bool(false)
bool(true)
bool(false)

View file

@ -0,0 +1,42 @@
--TEST--
Output of properties indicates if they are final
--FILE--
<?php
class Demo {
final public $a;
public $b;
}
$class = new ReflectionClass(Demo::class);
echo $class;
$propA = new ReflectionProperty(Demo::class, 'a');
echo $propA;
$propB = new ReflectionProperty(Demo::class, 'b');
echo $propB;
?>
--EXPECTF--
Class [ <user> class Demo ] {
@@ %s %d-%d
- Constants [0] {
}
- Static properties [0] {
}
- Static methods [0] {
}
- Properties [2] {
Property [ final public $a = NULL ]
Property [ public $b = NULL ]
}
- Methods [0] {
}
}
Property [ final public $a = NULL ]
Property [ public $b = NULL ]