diff options
author | Thiemo Kreuz <thiemo.kreuz@wikimedia.de> | 2020-05-29 10:37:05 +0200 |
---|---|---|
committer | Thiemo Kreuz (WMDE) <thiemo.kreuz@wikimedia.de> | 2020-05-29 09:37:03 +0000 |
commit | e111220a39d86f2c56566e8cc6a84429d928638c (patch) | |
tree | f8c2fde8ff67c9b420fe80f2210c5dde9d5ffb1f | |
parent | bbce47b29de1587eb2dba2d2cdd4ebd5df1ed52e (diff) | |
download | mediawikicore-e111220a39d86f2c56566e8cc6a84429d928638c.tar.gz mediawikicore-e111220a39d86f2c56566e8cc6a84429d928638c.zip |
upload: Modernize callback code to make use of PHP7 syntax
* Update the two "processing_instruction_handler" and
"external_dtd_handler" callbacks to use a syntax for the callback
that doesn't stuff the class name in a string, but actually
references the class.
* We don't need call_user_func() in modern PHP7 any more.
* Add and update a few type hints in UploadBase to make the code
easier explorable.
Change-Id: I0ab3cfbe4f0bf15b1da4ab10fd9ffc1986d968d0
-rw-r--r-- | includes/libs/mime/XmlTypeCheck.php | 16 | ||||
-rw-r--r-- | includes/upload/UploadBase.php | 13 | ||||
-rw-r--r-- | tests/phpunit/includes/upload/UploadBaseTest.php | 4 |
3 files changed, 14 insertions, 19 deletions
diff --git a/includes/libs/mime/XmlTypeCheck.php b/includes/libs/mime/XmlTypeCheck.php index 3bd7a563fb55..2e0f0c8fd3c6 100644 --- a/includes/libs/mime/XmlTypeCheck.php +++ b/includes/libs/mime/XmlTypeCheck.php @@ -325,12 +325,7 @@ class XmlTypeCheck { $callbackReturn = false; if ( is_callable( $this->filterCallback ) ) { - $callbackReturn = call_user_func( - $this->filterCallback, - $name, - $attribs, - $data - ); + $callbackReturn = ( $this->filterCallback )( $name, $attribs, $data ); } if ( $callbackReturn ) { // Filter hit! @@ -354,8 +349,8 @@ class XmlTypeCheck { private function processingInstructionHandler( $target, $data ) { $callbackReturn = false; if ( $this->parserOptions['processing_instruction_handler'] ) { - $callbackReturn = call_user_func( - $this->parserOptions['processing_instruction_handler'], + // @phan-suppress-next-line PhanTypeInvalidCallable false positive + $callbackReturn = $this->parserOptions['processing_instruction_handler']( $target, $data ); @@ -383,7 +378,7 @@ class XmlTypeCheck { $callbackReturn = false; if ( $generalCallback ) { - $callbackReturn = call_user_func( $generalCallback, $dtd ); + $callbackReturn = $generalCallback( $dtd ); } if ( $callbackReturn ) { // Filter hit! @@ -394,8 +389,7 @@ class XmlTypeCheck { $parsedDTD = $this->parseDTD( $dtd ); if ( $externalCallback && isset( $parsedDTD['type'] ) ) { - $callbackReturn = call_user_func( - $externalCallback, + $callbackReturn = $externalCallback( $parsedDTD['type'], $parsedDTD['publicid'] ?? null, $parsedDTD['systemid'] ?? null diff --git a/includes/upload/UploadBase.php b/includes/upload/UploadBase.php index d39a6310ed1a..653b97c78127 100644 --- a/includes/upload/UploadBase.php +++ b/includes/upload/UploadBase.php @@ -175,7 +175,7 @@ abstract class UploadBase { * * @param WebRequest &$request * @param string|null $type - * @return null|UploadBase + * @return null|self */ public static function createFromRequest( &$request, $type = null ) { $type = $type ?: $request->getVal( 'wpSourceType', 'File' ); @@ -188,6 +188,7 @@ abstract class UploadBase { $type = ucfirst( $type ); // Give hooks the chance to handle this request + /** @var self|null $className */ $className = null; Hooks::run( 'UploadCreateFromRequest', [ $type, &$className ] ); if ( $className === null ) { @@ -199,16 +200,16 @@ abstract class UploadBase { } // Check whether this upload class is enabled - if ( !call_user_func( [ $className, 'isEnabled' ] ) ) { + if ( !$className::isEnabled() ) { return null; } // Check whether the request is valid - if ( !call_user_func( [ $className, 'isValidRequest' ], $request ) ) { + if ( !$className::isValidRequest( $request ) ) { return null; } - /** @var UploadBase $handler */ + /** @var self $handler */ $handler = new $className; $handler->initializeFromRequest( $request ); @@ -1483,8 +1484,8 @@ abstract class UploadBase { [ $this, 'checkSvgScriptCallback' ], true, [ - 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback', - 'external_dtd_handler' => 'UploadBase::checkSvgExternalDTD', + 'processing_instruction_handler' => [ __CLASS__, 'checkSvgPICallback' ], + 'external_dtd_handler' => [ __CLASS__, 'checkSvgExternalDTD' ], ] ); if ( $check->wellFormed !== true ) { diff --git a/tests/phpunit/includes/upload/UploadBaseTest.php b/tests/phpunit/includes/upload/UploadBaseTest.php index bcc6452c4aeb..0bfdd41ac9a7 100644 --- a/tests/phpunit/includes/upload/UploadBaseTest.php +++ b/tests/phpunit/includes/upload/UploadBaseTest.php @@ -647,8 +647,8 @@ class UploadTestHandler extends UploadBase { [ $this, 'checkSvgScriptCallback' ], false, [ - 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback', - 'external_dtd_handler' => 'UploadBase::checkSvgExternalDTD' + 'processing_instruction_handler' => [ UploadBase::class, 'checkSvgPICallback' ], + 'external_dtd_handler' => [ UploadBase::class, 'checkSvgExternalDTD' ], ] ); return [ $check->wellFormed, $check->filterMatch ]; |