mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Merge branch 'PHP-8.4'
* PHP-8.4: Reflection: indicate final and abstract properties in string output
This commit is contained in:
commit
ded8af57c4
4 changed files with 91 additions and 1 deletions
|
@ -942,6 +942,12 @@ static void _property_string(smart_str *str, zend_property_info *prop, const cha
|
||||||
if (!prop) {
|
if (!prop) {
|
||||||
smart_str_append_printf(str, "<dynamic> public $%s", prop_name);
|
smart_str_append_printf(str, "<dynamic> public $%s", prop_name);
|
||||||
} else {
|
} 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 */
|
/* These are mutually exclusive */
|
||||||
switch (prop->flags & ZEND_ACC_PPP_MASK) {
|
switch (prop->flags & ZEND_ACC_PPP_MASK) {
|
||||||
case ZEND_ACC_PUBLIC:
|
case ZEND_ACC_PUBLIC:
|
||||||
|
|
42
ext/reflection/tests/abstract_property_indicated.phpt
Normal file
42
ext/reflection/tests/abstract_property_indicated.phpt
Normal 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 ]
|
|
@ -26,7 +26,7 @@ bool(true)
|
||||||
bool(false)
|
bool(false)
|
||||||
bool(true)
|
bool(true)
|
||||||
bool(false)
|
bool(false)
|
||||||
Property [ public private(set) int $bar ]
|
Property [ final public private(set) int $bar ]
|
||||||
bool(false)
|
bool(false)
|
||||||
bool(true)
|
bool(true)
|
||||||
bool(false)
|
bool(false)
|
||||||
|
|
42
ext/reflection/tests/final_property_indicated.phpt
Normal file
42
ext/reflection/tests/final_property_indicated.phpt
Normal 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 ]
|
Loading…
Add table
Add a link
Reference in a new issue