Plugins: Restore backward compatibility for PHP4-style passing of array( &$this )
as action argument to do_action()
.
This is a follow-up to [46149] to avoid unnecessary breakage in case of using the old notation. Props david.binda, jrf. Reviewed by azaozz. Fixes #48312. git-svn-id: https://develop.svn.wordpress.org/trunk@46568 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
67a937a2fd
commit
99d5986b0c
@ -470,6 +470,9 @@ function do_action( $tag, ...$arg ) {
|
||||
|
||||
if ( empty( $arg ) ) {
|
||||
$arg[] = '';
|
||||
} elseif ( is_array( $arg[0] ) && 1 === count( $arg[0] ) && isset( $arg[0][0] ) && is_object( $arg[0][0] ) ) {
|
||||
// Backward compatibility for PHP4-style passing of `array( &$this )` as action `$arg`.
|
||||
$arg[0] = $arg[0][0];
|
||||
}
|
||||
|
||||
$wp_filter[ $tag ]->do_action( $arg );
|
||||
|
@ -153,6 +153,25 @@ class Tests_Actions extends WP_UnitTestCase {
|
||||
$this->assertEquals( array( $val1, $val2 ), array_pop( $argsvar3 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests PHP 4 notation for calling actions while passing in an object by reference.
|
||||
*
|
||||
* @ticket 48312
|
||||
*/
|
||||
function test_action_args_with_php4_syntax() {
|
||||
$a = new MockAction();
|
||||
$tag = __FUNCTION__;
|
||||
$val = new stdClass;
|
||||
|
||||
add_action( $tag, array( &$a, 'action' ) );
|
||||
// Ñall the action with PHP 4 notation for passing object by reference.
|
||||
do_action( $tag, array( &$val ) );
|
||||
|
||||
$call_count = $a->get_call_count();
|
||||
$argsvar = $a->get_args();
|
||||
$this->assertSame( array( $val ), array_pop( $argsvar ) );
|
||||
}
|
||||
|
||||
function test_action_priority() {
|
||||
$a = new MockAction();
|
||||
$tag = __FUNCTION__;
|
||||
|
Loading…
Reference in New Issue
Block a user