xref: /PHP-8.3/UPGRADING.INTERNALS (revision 80b4c730)
1PHP 8.3 INTERNALS UPGRADE NOTES
2
31. Internal API changes
4
52. Build system changes
6
73. Module changes
8
94. OpCode changes
10
115. SAPI changes
12
13========================
141. Internal API changes
15========================
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* The misspelled ZEND_CGG_DIAGNOSTIC_IGNORED_(START|END) macros are deprecated.
74  Use ZEND_DIAGNOSTIC_IGNORED_(START|END) instead. These macros now also support
75  Clang.
76
77========================
782. Build system changes
79========================
80
81* PHP_EXTRA_VERSION can be passed to configure script to control custom PHP
82  build versions: ./configure PHP_EXTRA_VERSION="-acme"
83
84* LDFLAGS are not unset anymore allowing them to be adjusted e.g.
85  LDFLAGS="..." ./configure
86
87* Removed the HAVE_DEV_URANDOM compile time check.  HAVE_DEV_URANDOM will
88  now never be defined. Any checks relying on HAVE_DEV_URANDOM should be
89  removed.  Even with HAVE_DEV_URANDOM it was not guaranteed that
90  /dev/urandom is actually available at run time and thus a runtime
91  check needs to happen in all cases.
92
93========================
943. Module changes
95========================
96
97 a. ext/json
98   - A new function php_json_validate_ex has been added to check if the
99     provided C string is valid for the given depth and options.
100
101 b. ext/standard
102   - The PHPAPI php_url_encode_hash_ex() function has had its signature change
103     from:
104     PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
105     				const char *num_prefix, size_t num_prefix_len,
106     				const char *key_prefix, size_t key_prefix_len,
107     				const char *key_suffix, size_t key_suffix_len,
108     				zval *type, const char *arg_sep, int enc_type);
109     to:
110     PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
111     				const char *num_prefix, size_t num_prefix_len,
112     				const zend_string *key_prefix,
113     				zval *type, const zend_string *arg_sep, int enc_type);
114     The change to use zend_string prevent the computation of the arg_sep
115     length at each call. The key_suffix parameter was dropped as it was a
116     constant value and depended on the key_prefix parameter to not be NULL.
117
118 c. ext/mysqlnd
119   - The function mysqlnd_shutdown and its corresponding internal methods
120   mysqlnd_command::shutdown & mysqlnd_conn_data::shutdown have been removed.
121   These functions are deprecated by MySQL in favour of SHUTDOWN SQL statement.
122
123 d. ext/pcre
124   - The function pcre_get_compiled_regex_ex has been removed.
125   Use pcre_get_compiled_regex instead.
126
127 e. ext/spl
128   - The PHPAPI spl_iterator_apply() function now returns zend_result instead of int.
129     There are no functional changes.
130   - The field _spl_filesystem_object->is_recursive has been removed.
131
132 f. ext/dom
133   - A new function dom_get_doc_props_read_only() is added to gather the document
134     properties in a read-only way. This function avoids allocation when there are
135     no document properties changed yet.
136   - The node list returned by DOMNode::getElementsByTagName() and
137	   DOMNode::getElementsByTagNameNS() now caches the length and the last requested item.
138	   This means that the length and the last requested item are not recalculated
139	   when the node list is iterated over multiple times.
140	   If you do not use the internal PHP dom APIs to modify the document, you need to
141	   manually invalidate the cache using php_libxml_invalidate_node_list_cache_from_doc().
142	   Furthermore, the following internal APIs were added to handle the cache:
143	     . php_dom_is_cache_tag_stale_from_doc_ptr()
144	     . php_dom_is_cache_tag_stale_from_node()
145	     . php_dom_mark_cache_tag_up_to_date_from_node()
146   - The function dom_get_elements_by_tag_name_ns_raw() has an additional parameter to indicate
147     the base node of the node list. This function also no longer accepts -1 as the index argument.
148   - The function dom_namednode_iter() has additional arguments to avoid recomputing the length of
149     the strings.
150   - The functions dom_parent_node_prepend(), dom_parent_node_append(), dom_parent_node_after(), and
151     dom_parent_node_before() now use an uint32_t argument for the number of nodes instead of int.
152   - There is now a helper function php_dom_get_content_into_zval() to get the contents of a node.
153     This avoids allocation if possible.
154   - The function dom_set_old_ns() has been moved into ext/libxml as php_libxml_set_old_ns() and
155     is now publicly exposed as an API.
156
157 g. ext/libxml
158   - Two new functions: php_libxml_invalidate_node_list_cache_from_doc() and
159     php_libxml_invalidate_node_list_cache() were added to invalidate the cache of a node list.
160
161========================
1624. OpCode changes
163========================
164
165========================
1665. SAPI changes
167========================
168
169* SAPIs that may execute in alternative stacks have to set EG(stack_limit) and
170  EG(stack_base)
171