File tree Expand file tree Collapse file tree 4 files changed +48
-0
lines changed Expand file tree Collapse file tree 4 files changed +48
-0
lines changed Original file line number Diff line number Diff line change @@ -4199,6 +4199,24 @@ static void preload_link(void)
4199
4199
preload_remove_declares (op_array );
4200
4200
}
4201
4201
} ZEND_HASH_FOREACH_END ();
4202
+
4203
+ if (ce -> num_hooked_props > 0 ) {
4204
+ zend_property_info * info ;
4205
+
4206
+ ZEND_HASH_MAP_FOREACH_PTR (& ce -> properties_info , info ) {
4207
+ if (info -> hooks ) {
4208
+ for (uint32_t i = 0 ; i < ZEND_PROPERTY_HOOK_COUNT ; i ++ ) {
4209
+ if (info -> hooks [i ]) {
4210
+ op_array = & info -> hooks [i ]-> op_array ;
4211
+ ZEND_ASSERT (op_array -> type == ZEND_USER_FUNCTION );
4212
+ if (!(op_array -> fn_flags & ZEND_ACC_TRAIT_CLONE )) {
4213
+ preload_remove_declares (op_array );
4214
+ }
4215
+ }
4216
+ }
4217
+ }
4218
+ } ZEND_HASH_FOREACH_END ();
4219
+ }
4202
4220
} ZEND_HASH_FOREACH_END ();
4203
4221
}
4204
4222
Original file line number Diff line number Diff line change @@ -3983,6 +3983,24 @@ static void zend_jit_restart_preloaded_script(zend_persistent_script *script)
3983
3983
zend_jit_restart_preloaded_op_array (op_array );
3984
3984
}
3985
3985
} ZEND_HASH_FOREACH_END ();
3986
+
3987
+ if (ce -> num_hooked_props > 0 ) {
3988
+ zend_property_info * prop ;
3989
+
3990
+ ZEND_HASH_MAP_FOREACH_PTR (& ce -> properties_info , prop ) {
3991
+ if (prop -> hooks ) {
3992
+ for (uint32_t i = 0 ; i < ZEND_PROPERTY_HOOK_COUNT ; i ++ ) {
3993
+ if (prop -> hooks [i ]) {
3994
+ op_array = & prop -> hooks [i ]-> op_array ;
3995
+ ZEND_ASSERT (op_array -> type == ZEND_USER_FUNCTION );
3996
+ if (!(op_array -> fn_flags & ZEND_ACC_TRAIT_CLONE )) {
3997
+ zend_jit_restart_preloaded_op_array (op_array );
3998
+ }
3999
+ }
4000
+ }
4001
+ }
4002
+ } ZEND_HASH_FOREACH_END ();
4003
+ }
3986
4004
} ZEND_HASH_FOREACH_END ();
3987
4005
}
3988
4006
Original file line number Diff line number Diff line change @@ -5,6 +5,15 @@ class Test {
5
5
echo "dynamic \n" ;
6
6
}
7
7
}
8
+
9
+ public int $ hook {
10
+ get {
11
+ function dynamic_in_hook () {
12
+ echo "dynamic in hook \n" ;
13
+ }
14
+ return 1 ;
15
+ }
16
+ }
8
17
}
9
18
10
19
function func () {
@@ -16,3 +25,4 @@ function func() {
16
25
$ test = new Test ;
17
26
$ test ->method ();
18
27
func ();
28
+ $ test ->hook ;
Original file line number Diff line number Diff line change @@ -15,7 +15,9 @@ if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows
15
15
<?php
16
16
dynamic ();
17
17
dynamic2 ();
18
+ dynamic_in_hook ();
18
19
?>
19
20
--EXPECT--
20
21
dynamic
21
22
dynamic2
23
+ dynamic in hook
You can’t perform that action at this time.
0 commit comments