1
- PHP 8.3 INTERNALS UPGRADE NOTES
1
+ PHP 8.4 INTERNALS UPGRADE NOTES
2
2
3
3
1. Internal API changes
4
4
@@ -14,154 +14,18 @@ PHP 8.3 INTERNALS UPGRADE NOTES
14
14
1. Internal API changes
15
15
========================
16
16
17
- * zend_class_entry now possesses a default_object_handlers field, which
18
- provides a default object handler when create_object() is not overriding it.
19
- * Custom Fiber implementations have to initialize EG(stack_limit) and
20
- EG(stack_base).
21
- * EG(opline_before_exception) may now be null if the VM throws an exception
22
- before executing any opline.
23
- * Many C header files have been cleaned up and include dependencies
24
- have been reduced. Many headers which used to be always included by
25
- Zend headers (e.g. "errno.h") are no longer implied, and this may
26
- break the build of third-party extensions which relied on this
27
- implementation detail. Those extensions may need to add the missing
28
- #include lines.
29
- * Since version 8, PHP requires a C99 compiler. Configure-time checks
30
- for C99 features have been removed and therefore macro definitions
31
- from php_config.h have disappeared. Do not use those feature
32
- macros.
33
- * Internal class aliases created during request time can now exist in
34
- the class table. zend_register_class_alias_ex() will not increase
35
- the refcount for class aliases and the cleanup function takes this
36
- into account.
37
- * The return types of the following functions have been changed from
38
- `bool` to `zend_result`:
39
- - zend_fiber_init_context()
40
- * The fast_add_function() has been removed, use add_function() that will
41
- call the static inline add_function_fast() instead.
42
- * The order of members of zend_op_array, zend_ssa_var, zend_ssa_var_info,
43
- zend_executor_globals and php_core_globals have changed to improve
44
- struct packing which reduces their size.
45
- * Many calls to zend_assign_to_variable have been replaced with
46
- zend_assign_to_variable_ex which allows delaying the releasing of the old
47
- variable value. This avoids side-effects through destructors between the
48
- assignment of the variable and the assignment to the result zval in the VM
49
- (i.e. it may free the new value). See GH-10168 for details.
50
- * The return types of the following functions were changed from int to
51
- zend_result:
52
- - open_file_for_scanning
53
- - php_rfc1867_callback
54
- - virtual_chdir
55
- - zend_execute_scripts
56
- - zend_get_module_started
57
- - zend_handle_undef_args
58
- - zend_list_delete
59
- - zend_multibyte_parse_encoding_list
60
- - zend_multibyte_set_internal_encoding
61
- - zend_parse_ini_file
62
- - zend_parse_ini_string
63
- - zend_set_user_opcode_handler
64
- - zend_ssa_inference
65
- * Removed unused macros PHP_FNV1_32A_INIT and PHP_FNV1A_64_INIT. See GH-11114.
66
- * ext/standard/hrtime.h was moved to Zend/zend_hrtime.h
67
- * The prefix of the PHP_HRTIME_ macros was changed to ZEND_HRTIME_
68
- * The HRTIME_AVAILABLE macro was renamed to ZEND_HRTIME_AVAILABLE
69
- * The php_hrtime_current() function was renamed to zend_hrtime()
70
- * _php_stream_dirent now has an extra d_type field that is used to store the
71
- directory entry type. This can be used to avoid additional stat calls for
72
- types when the type is already known.
73
-
74
17
========================
75
18
2. Build system changes
76
19
========================
77
20
78
- * PHP_EXTRA_VERSION can be passed to configure script to control custom PHP
79
- build versions: ./configure PHP_EXTRA_VERSION="-acme"
80
-
81
- * LDFLAGS are not unset anymore allowing them to be adjusted e.g.
82
- LDFLAGS="..." ./configure
83
-
84
- * Removed the HAVE_DEV_URANDOM compile time check. HAVE_DEV_URANDOM will
85
- now never be defined. Any checks relying on HAVE_DEV_URANDOM should be
86
- removed. Even with HAVE_DEV_URANDOM it was not guaranteed that
87
- /dev/urandom is actually available at run time and thus a runtime
88
- check needs to happen in all cases.
89
-
90
21
========================
91
22
3. Module changes
92
23
========================
93
24
94
- a. ext/json
95
- - A new function php_json_validate_ex has been added to check if the
96
- provided C string is valid for the given depth and options.
97
-
98
- b. ext/standard
99
- - The PHPAPI php_url_encode_hash_ex() function has had its signature change
100
- from:
101
- PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
102
- const char *num_prefix, size_t num_prefix_len,
103
- const char *key_prefix, size_t key_prefix_len,
104
- const char *key_suffix, size_t key_suffix_len,
105
- zval *type, const char *arg_sep, int enc_type);
106
- to:
107
- PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
108
- const char *num_prefix, size_t num_prefix_len,
109
- const zend_string *key_prefix,
110
- zval *type, const zend_string *arg_sep, int enc_type);
111
- The change to use zend_string prevent the computation of the arg_sep
112
- length at each call. The key_suffix parameter was dropped as it was a
113
- constant value and depended on the key_prefix parameter to not be NULL.
114
-
115
- c. ext/mysqlnd
116
- - The function mysqlnd_shutdown and its corresponding internal methods
117
- mysqlnd_command::shutdown & mysqlnd_conn_data::shutdown have been removed.
118
- These functions are deprecated by MySQL in favour of SHUTDOWN SQL statement.
119
-
120
- d. ext/pcre
121
- - The function pcre_get_compiled_regex_ex has been removed.
122
- Use pcre_get_compiled_regex instead.
123
-
124
- e. ext/spl
125
- - The PHPAPI spl_iterator_apply() function now returns zend_result instead of int.
126
- There are no functional changes.
127
- - The field _spl_filesystem_object->is_recursive has been removed.
128
-
129
- f. ext/dom
130
- - A new function dom_get_doc_props_read_only() is added to gather the document
131
- properties in a read-only way. This function avoids allocation when there are
132
- no document properties changed yet.
133
- - The node list returned by DOMNode::getElementsByTagName() and
134
- DOMNode::getElementsByTagNameNS() now caches the length and the last requested item.
135
- This means that the length and the last requested item are not recalculated
136
- when the node list is iterated over multiple times.
137
- If you do not use the internal PHP dom APIs to modify the document, you need to
138
- manually invalidate the cache using php_libxml_invalidate_node_list_cache_from_doc().
139
- Furthermore, the following internal APIs were added to handle the cache:
140
- . php_dom_is_cache_tag_stale_from_doc_ptr()
141
- . php_dom_is_cache_tag_stale_from_node()
142
- . php_dom_mark_cache_tag_up_to_date_from_node()
143
- - The function dom_get_elements_by_tag_name_ns_raw() has an additional parameter to indicate
144
- the base node of the node list. This function also no longer accepts -1 as the index argument.
145
- - The function dom_namednode_iter() has additional arguments to avoid recomputing the length of
146
- the strings.
147
- - The functions dom_parent_node_prepend(), dom_parent_node_append(), dom_parent_node_after(), and
148
- dom_parent_node_before() now use an uint32_t argument for the number of nodes instead of int.
149
- - There is now a helper function php_dom_get_content_into_zval() to get the contents of a node.
150
- This avoids allocation if possible.
151
- - The function dom_set_old_ns() has been moved into ext/libxml as php_libxml_set_old_ns() and
152
- is now publicly exposed as an API.
153
-
154
- g. ext/libxml
155
- - Two new functions: php_libxml_invalidate_node_list_cache_from_doc() and
156
- php_libxml_invalidate_node_list_cache() were added to invalidate the cache of a node list.
157
-
158
25
========================
159
26
4. OpCode changes
160
27
========================
161
28
162
29
========================
163
30
5. SAPI changes
164
31
========================
165
-
166
- * SAPIs that may execute in alternative stacks have to set EG(stack_limit) and
167
- EG(stack_base)
0 commit comments