mirror of
https://github.com/php/php-src.git
synced 2024-11-27 11:53:33 +08:00
80b4c73030
Newer versions of Clang now also complain about -Wscript-prototypes for included headers. Closes GH-12467
171 lines
7.5 KiB
Plaintext
171 lines
7.5 KiB
Plaintext
PHP 8.3 INTERNALS UPGRADE NOTES
|
|
|
|
1. Internal API changes
|
|
|
|
2. Build system changes
|
|
|
|
3. Module changes
|
|
|
|
4. OpCode changes
|
|
|
|
5. SAPI changes
|
|
|
|
========================
|
|
1. Internal API changes
|
|
========================
|
|
|
|
* zend_class_entry now possesses a default_object_handlers field, which
|
|
provides a default object handler when create_object() is not overriding it.
|
|
* Custom Fiber implementations have to initialize EG(stack_limit) and
|
|
EG(stack_base).
|
|
* EG(opline_before_exception) may now be null if the VM throws an exception
|
|
before executing any opline.
|
|
* Many C header files have been cleaned up and include dependencies
|
|
have been reduced. Many headers which used to be always included by
|
|
Zend headers (e.g. "errno.h") are no longer implied, and this may
|
|
break the build of third-party extensions which relied on this
|
|
implementation detail. Those extensions may need to add the missing
|
|
#include lines.
|
|
* Since version 8, PHP requires a C99 compiler. Configure-time checks
|
|
for C99 features have been removed and therefore macro definitions
|
|
from php_config.h have disappeared. Do not use those feature
|
|
macros.
|
|
* Internal class aliases created during request time can now exist in
|
|
the class table. zend_register_class_alias_ex() will not increase
|
|
the refcount for class aliases and the cleanup function takes this
|
|
into account.
|
|
* The return types of the following functions have been changed from
|
|
`bool` to `zend_result`:
|
|
- zend_fiber_init_context()
|
|
* The fast_add_function() has been removed, use add_function() that will
|
|
call the static inline add_function_fast() instead.
|
|
* The order of members of zend_op_array, zend_ssa_var, zend_ssa_var_info,
|
|
zend_executor_globals and php_core_globals have changed to improve
|
|
struct packing which reduces their size.
|
|
* Many calls to zend_assign_to_variable have been replaced with
|
|
zend_assign_to_variable_ex which allows delaying the releasing of the old
|
|
variable value. This avoids side-effects through destructors between the
|
|
assignment of the variable and the assignment to the result zval in the VM
|
|
(i.e. it may free the new value). See GH-10168 for details.
|
|
* The return types of the following functions were changed from int to
|
|
zend_result:
|
|
- open_file_for_scanning
|
|
- php_rfc1867_callback
|
|
- virtual_chdir
|
|
- zend_execute_scripts
|
|
- zend_get_module_started
|
|
- zend_handle_undef_args
|
|
- zend_list_delete
|
|
- zend_multibyte_parse_encoding_list
|
|
- zend_multibyte_set_internal_encoding
|
|
- zend_parse_ini_file
|
|
- zend_parse_ini_string
|
|
- zend_set_user_opcode_handler
|
|
- zend_ssa_inference
|
|
* Removed unused macros PHP_FNV1_32A_INIT and PHP_FNV1A_64_INIT. See GH-11114.
|
|
* ext/standard/hrtime.h was moved to Zend/zend_hrtime.h
|
|
* The prefix of the PHP_HRTIME_ macros was changed to ZEND_HRTIME_
|
|
* The HRTIME_AVAILABLE macro was renamed to ZEND_HRTIME_AVAILABLE
|
|
* The php_hrtime_current() function was renamed to zend_hrtime()
|
|
* _php_stream_dirent now has an extra d_type field that is used to store the
|
|
directory entry type. This can be used to avoid additional stat calls for
|
|
types when the type is already known.
|
|
* The misspelled ZEND_CGG_DIAGNOSTIC_IGNORED_(START|END) macros are deprecated.
|
|
Use ZEND_DIAGNOSTIC_IGNORED_(START|END) instead. These macros now also support
|
|
Clang.
|
|
|
|
========================
|
|
2. Build system changes
|
|
========================
|
|
|
|
* PHP_EXTRA_VERSION can be passed to configure script to control custom PHP
|
|
build versions: ./configure PHP_EXTRA_VERSION="-acme"
|
|
|
|
* LDFLAGS are not unset anymore allowing them to be adjusted e.g.
|
|
LDFLAGS="..." ./configure
|
|
|
|
* Removed the HAVE_DEV_URANDOM compile time check. HAVE_DEV_URANDOM will
|
|
now never be defined. Any checks relying on HAVE_DEV_URANDOM should be
|
|
removed. Even with HAVE_DEV_URANDOM it was not guaranteed that
|
|
/dev/urandom is actually available at run time and thus a runtime
|
|
check needs to happen in all cases.
|
|
|
|
========================
|
|
3. Module changes
|
|
========================
|
|
|
|
a. ext/json
|
|
- A new function php_json_validate_ex has been added to check if the
|
|
provided C string is valid for the given depth and options.
|
|
|
|
b. ext/standard
|
|
- The PHPAPI php_url_encode_hash_ex() function has had its signature change
|
|
from:
|
|
PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
|
|
const char *num_prefix, size_t num_prefix_len,
|
|
const char *key_prefix, size_t key_prefix_len,
|
|
const char *key_suffix, size_t key_suffix_len,
|
|
zval *type, const char *arg_sep, int enc_type);
|
|
to:
|
|
PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
|
|
const char *num_prefix, size_t num_prefix_len,
|
|
const zend_string *key_prefix,
|
|
zval *type, const zend_string *arg_sep, int enc_type);
|
|
The change to use zend_string prevent the computation of the arg_sep
|
|
length at each call. The key_suffix parameter was dropped as it was a
|
|
constant value and depended on the key_prefix parameter to not be NULL.
|
|
|
|
c. ext/mysqlnd
|
|
- The function mysqlnd_shutdown and its corresponding internal methods
|
|
mysqlnd_command::shutdown & mysqlnd_conn_data::shutdown have been removed.
|
|
These functions are deprecated by MySQL in favour of SHUTDOWN SQL statement.
|
|
|
|
d. ext/pcre
|
|
- The function pcre_get_compiled_regex_ex has been removed.
|
|
Use pcre_get_compiled_regex instead.
|
|
|
|
e. ext/spl
|
|
- The PHPAPI spl_iterator_apply() function now returns zend_result instead of int.
|
|
There are no functional changes.
|
|
- The field _spl_filesystem_object->is_recursive has been removed.
|
|
|
|
f. ext/dom
|
|
- A new function dom_get_doc_props_read_only() is added to gather the document
|
|
properties in a read-only way. This function avoids allocation when there are
|
|
no document properties changed yet.
|
|
- The node list returned by DOMNode::getElementsByTagName() and
|
|
DOMNode::getElementsByTagNameNS() now caches the length and the last requested item.
|
|
This means that the length and the last requested item are not recalculated
|
|
when the node list is iterated over multiple times.
|
|
If you do not use the internal PHP dom APIs to modify the document, you need to
|
|
manually invalidate the cache using php_libxml_invalidate_node_list_cache_from_doc().
|
|
Furthermore, the following internal APIs were added to handle the cache:
|
|
. php_dom_is_cache_tag_stale_from_doc_ptr()
|
|
. php_dom_is_cache_tag_stale_from_node()
|
|
. php_dom_mark_cache_tag_up_to_date_from_node()
|
|
- The function dom_get_elements_by_tag_name_ns_raw() has an additional parameter to indicate
|
|
the base node of the node list. This function also no longer accepts -1 as the index argument.
|
|
- The function dom_namednode_iter() has additional arguments to avoid recomputing the length of
|
|
the strings.
|
|
- The functions dom_parent_node_prepend(), dom_parent_node_append(), dom_parent_node_after(), and
|
|
dom_parent_node_before() now use an uint32_t argument for the number of nodes instead of int.
|
|
- There is now a helper function php_dom_get_content_into_zval() to get the contents of a node.
|
|
This avoids allocation if possible.
|
|
- The function dom_set_old_ns() has been moved into ext/libxml as php_libxml_set_old_ns() and
|
|
is now publicly exposed as an API.
|
|
|
|
g. ext/libxml
|
|
- Two new functions: php_libxml_invalidate_node_list_cache_from_doc() and
|
|
php_libxml_invalidate_node_list_cache() were added to invalidate the cache of a node list.
|
|
|
|
========================
|
|
4. OpCode changes
|
|
========================
|
|
|
|
========================
|
|
5. SAPI changes
|
|
========================
|
|
|
|
* SAPIs that may execute in alternative stacks have to set EG(stack_limit) and
|
|
EG(stack_base)
|