Make WordPress Core


Ignore:
Timestamp:
06/08/2024 10:55:55 AM (2 years ago)
Author:
dmsnell
Message:

HTML API: Return subclass from ::create_fragment

When the WP_HTML_Processor was introduced with its ::create_fragment()
static creator method, that method has been returning a new self(...).
Unfortunately, this means that subclasses cannot use that method since it
will return the WP_HTML_Processor instead of the subclass.

With this patch, the static creator method returns new static(...) to preserve
the intended behavior. A new test asserts this behavior for future changes.

Developed in ​https://github.com/WordPress/wordpress-develop/pull/6729
Discussed in https://core.trac.wordpress.org/ticket/61374

Props dmsnell, jonsurrell.
Follow-up to [56274].
Fixes #61374.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/html-api/wpHtmlProcessor.php

    r58192 r58363  
    518518                );
    519519        }
     520
     521        /**
     522         * Ensures that subclasses can be created from ::create_fragment method.
     523         *
     524         * @ticket 61374
     525         */
     526        public function test_subclass_create_fragment_creates_subclass() {
     527                $processor = WP_HTML_Processor::create_fragment( '' );
     528                $this->assertInstanceOf( WP_HTML_Processor::class, $processor, '::create_fragment did not return class instance.' );
     529
     530                $subclass_instance = new class('') extends WP_HTML_Processor {
     531                        public function __construct( $html ) {
     532                                parent::__construct( $html, parent::CONSTRUCTOR_UNLOCK_CODE );
     533                        }
     534                };
     535
     536                $subclass_processor = call_user_func( array( get_class( $subclass_instance ), 'create_fragment' ), '' );
     537                $this->assertInstanceOf( get_class( $subclass_instance ), $subclass_processor, '::create_fragment did not return subclass instance.' );
     538        }
    520539}
Note: See TracChangeset for help on using the changeset viewer.