PHP 8.4 | Remove use of xml_set_object() [2] (Trac 62061)#7371
Conversation
The XML Parser extension still supports a quite dated mechanism for method based callbacks, where the object is first set via `xml_set_object()` and the callbacks are then set by passing only the name of the method to the relevant parameters on any of the `xml_set_*_handler()` functions. ```php xml_set_object( $parser, $my_obj ); xml_set_character_data_handler( $parser, 'method_name_on_my_obj' ); ``` Passing proper callables to the `xml_set_*_handler()` functions has been supported for the longest time and is cross-version compatible. So the above code is 100% equivalent to: ```php xml_set_character_data_handler( $parser, [$my_obj, 'method_name_on_my_obj'] ); ``` The mechanism of setting the callbacks with `xml_set_object()` has now been deprecated as of PHP 8.4, in favour of passing proper callables to the `xml_set_*_handler()` functions. This is also means that calling the `xml_set_object()` function is deprecated as well. This commit fixes this deprecation for the `IXR_Message::parse()` method. This change is safeguarded via the new`Tests_XMLRPC_Message::test_parse_sets_handlers()` test method. Note: I recognize that this is "officially" an external library, but AFAIK, this package is no longer externally maintained. The code style of the fix in the source file is in line with the existing code style for the file. Refs: * https://wiki.php.net/rfc/deprecations_php_8_4#xml_set_object_and_xml_set_handler_with_string_method_names * https://www.php.net/manual/en/function.xml-set-object.php * https://www.php.net/manual/en/ref.xml.php
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
Props: @costdev for pointing out these were missing
There was a problem hiding this comment.
The changes made in IXR_Message::parse() are consistent with those made in https://core.trac.wordpress.org/changeset/59055. The rationale is clear and makes sense.
I agree with this line of thinking:
Note: I recognize that this is "officially" an external library, but AFAIK, this package is no longer externally maintained. The code style of the fix in the source file is in line with the existing code style for the file.
Ready for commit 👍
|
Committed via https://core.trac.wordpress.org/changeset/59056 ✅ |
The XML Parser extension still supports a quite dated mechanism for method based callbacks, where the object is first set via
xml_set_object()and the callbacks are then set by passing only the name of the method to the relevant parameters on any of thexml_set_*_handler()functions.Passing proper callables to the
xml_set_*_handler()functions has been supported for the longest time and is cross-version compatible. So the above code is 100% equivalent to:The mechanism of setting the callbacks with
xml_set_object()has now been deprecated as of PHP 8.4, in favour of passing proper callables to thexml_set_*_handler()functions. This is also means that calling thexml_set_object()function is deprecated as well.This commit fixes this deprecation for the
IXR_Message::parse()method.This change is safeguarded via the new
Tests_XMLRPC_Message::test_parse_sets_handlers()test method.Note: I recognize that this is "officially" an external library, but AFAIK, this package is no longer externally maintained. The code style of the fix in the source file is in line with the existing code style for the file.
Refs:
Trac ticket: https://core.trac.wordpress.org/ticket/62061
This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.