1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 08:12:21 +01:00

Merge branch 'PHP-8.4'

* PHP-8.4:
  Fix property hook backing value access in multi-level inheritance
This commit is contained in:
Ilija Tovilo
2025-02-26 20:49:15 +01:00
2 changed files with 71 additions and 1 deletions

View 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)
}

View File

@@ -1448,7 +1448,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))) {