mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Fix property hook backing value access in multi-level inheritance
Discovered by Niels when testing GH-17376.
This commit is contained in:
parent
c8bead8393
commit
7a55116f12
3 changed files with 74 additions and 1 deletions
3
NEWS
3
NEWS
|
@ -2,6 +2,9 @@ PHP NEWS
|
|||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? ????, PHP 8.4.6
|
||||
|
||||
- Core:
|
||||
. Fixed property hook backing value access in multi-level inheritance.
|
||||
(ilutov)
|
||||
|
||||
27 Feb 2025, PHP 8.4.5
|
||||
|
||||
|
|
70
Zend/tests/property_hooks/multi_level_inheritance.phpt
Normal file
70
Zend/tests/property_hooks/multi_level_inheritance.phpt
Normal file
|
@ -0,0 +1,70 @@
|
|||
--TEST--
|
||||
Property hooks with multi level inheritance
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class A {
|
||||
public $prop = 1;
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
public $prop = 2 { get => parent::$prop::get() * 2; }
|
||||
}
|
||||
|
||||
class C extends B {
|
||||
public $prop = 3;
|
||||
}
|
||||
|
||||
function test(A $a) {
|
||||
var_dump($a);
|
||||
var_dump((array)$a);
|
||||
var_dump(unserialize(serialize($a)));
|
||||
var_dump(get_object_vars($a));
|
||||
var_dump(json_decode(json_encode($a)));
|
||||
}
|
||||
|
||||
test(new B);
|
||||
test(new C);
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(B)#%d (1) {
|
||||
["prop"]=>
|
||||
int(2)
|
||||
}
|
||||
array(1) {
|
||||
["prop"]=>
|
||||
int(2)
|
||||
}
|
||||
object(B)#%d (1) {
|
||||
["prop"]=>
|
||||
int(2)
|
||||
}
|
||||
array(1) {
|
||||
["prop"]=>
|
||||
int(4)
|
||||
}
|
||||
object(stdClass)#%d (1) {
|
||||
["prop"]=>
|
||||
int(4)
|
||||
}
|
||||
object(C)#%d (1) {
|
||||
["prop"]=>
|
||||
int(3)
|
||||
}
|
||||
array(1) {
|
||||
["prop"]=>
|
||||
int(3)
|
||||
}
|
||||
object(C)#%d (1) {
|
||||
["prop"]=>
|
||||
int(3)
|
||||
}
|
||||
array(1) {
|
||||
["prop"]=>
|
||||
int(6)
|
||||
}
|
||||
object(stdClass)#%d (1) {
|
||||
["prop"]=>
|
||||
int(6)
|
||||
}
|
|
@ -1436,7 +1436,7 @@ static void do_inherit_property(zend_property_info *parent_info, zend_string *ke
|
|||
}
|
||||
if (!(parent_info->flags & ZEND_ACC_PRIVATE)) {
|
||||
if (!(parent_info->ce->ce_flags & ZEND_ACC_INTERFACE)) {
|
||||
child_info->prototype = parent_info;
|
||||
child_info->prototype = parent_info->prototype;
|
||||
}
|
||||
|
||||
if (UNEXPECTED((parent_info->flags & ZEND_ACC_STATIC) != (child_info->flags & ZEND_ACC_STATIC))) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue