Skip to content

Commit

Permalink
PHP 8.4 | Remove use of xml_set_object() (#172)
Browse files Browse the repository at this point in the history
* PHP 8.4 | Remove use of xml_set_object()

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 these deprecations for this codebase.

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

---------

Co-authored-by: jrfnl <[email protected]>
  • Loading branch information
jrfnl and jrfnl authored Oct 21, 2024
1 parent 8f86f96 commit 5adf384
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 3 deletions.
5 changes: 2 additions & 3 deletions src/parsers/class-wxr-parser-xml.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,8 @@ public function parse( $file ) {
$xml = xml_parser_create( 'UTF-8' );
xml_parser_set_option( $xml, XML_OPTION_SKIP_WHITE, 1 );
xml_parser_set_option( $xml, XML_OPTION_CASE_FOLDING, 0 );
xml_set_object( $xml, $this );
xml_set_character_data_handler( $xml, 'cdata' );
xml_set_element_handler( $xml, 'tag_open', 'tag_close' );
xml_set_character_data_handler( $xml, array( $this, 'cdata' ) );
xml_set_element_handler( $xml, array( $this, 'tag_open' ), array( $this, 'tag_close' ) );

if ( ! xml_parse( $xml, file_get_contents( $file ), true ) ) {
$current_line = xml_get_current_line_number( $xml );
Expand Down
1 change: 1 addition & 0 deletions src/readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ If you would prefer to do things manually then follow these instructions:

* Update compatibility tested-up-to to WordPress 6.7.
* Update call to `post_exists` to include `post_type` in the query
* PHP 8.4 compatibility fixes.

= 0.8.2 =

Expand Down

0 comments on commit 5adf384

Please sign in to comment.