The first PHP 7.4 release candidate is out. This new version of PHP brings several new deprecations that affect Semantic MediaWiki, including the deprecation of accessing array offsets via curly brackets[1][2] and unparenthesized nested ternary operators[3]. Semantic MediaWiki is using some of these deprecated features, which cause deprecation warnings.
[1] https://github.com/php/php-src/blob/PHP-7.4/UPGRADING#L362
[2] https://wiki.php.net/rfc/deprecate_curly_braces_array_access
[3] https://github.com/php/php-src/blob/PHP-7.4/UPGRADING#L350
Executing the Semantic MediaWiki PHPUnit test suite results in various warnings, examples follow:
Deprecated: Unparenthesized `a ? b : c ? d : e` is deprecated. Use either `(a ? b : c) ? d : e` or `a ? b : (c ? d : e)` in /usr/src/myapp/extensions/SemanticMediaWiki/tests/phpunit/Utils/JSONScript/JsonTestCaseFileHandler.php on line 380
Call Stack:
0.0015 407504 1. {main}() /usr/src/myapp/tests/phpunit/phpunit.php:0
0.0238 671968 2. require('/usr/src/myapp/maintenance/doMaintenance.php') /usr/src/myapp/tests/phpunit/phpunit.php:136
1.0265 15686736 3. PHPUnitMaintClass->execute() /usr/src/myapp/maintenance/doMaintenance.php:99
1.0579 16402872 4. MediaWikiPHPUnitCommand->run() /usr/src/myapp/tests/phpunit/phpunit.php:97
1.0579 16402872 5. MediaWikiPHPUnitCommand->handleArguments() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/TextUI/Command.php:159
1.1184 16861472 6. MediaWikiPHPUnitCommand->handleBootstrap() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/TextUI/Command.php:788
1.1226 16866544 7. PHPUnit\Util\Fileloader::checkAndLoad() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/TextUI/Command.php:991
1.1248 16866832 8. PHPUnit\Util\Fileloader::load() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Util/Fileloader.php:48
1.1263 16875408 9. include_once('/usr/src/myapp/extensions/SemanticMediaWiki/tests/bootstrap.php') /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Util/Fileloader.php:64
1.1283 16889840 10. require('/usr/src/myapp/extensions/SemanticMediaWiki/tests/autoloader.php') /usr/src/myapp/extensions/SemanticMediaWiki/tests/bootstrap.php:15
1.2602 18745376 11. class_alias() /usr/src/myapp/extensions/SemanticMediaWiki/tests/autoloader.php:76
1.2602 18745536 12. spl_autoload_call() /usr/src/myapp/extensions/SemanticMediaWiki/tests/autoloader.php:76
1.2603 18745616 13. Composer\Autoload\ClassLoader->loadClass() /usr/src/myapp/extensions/SemanticMediaWiki/tests/autoloader.php:76
1.2638 18745744 14. Composer\Autoload\includeFile() /usr/src/myapp/vendor/composer/ClassLoader.php:322
Deprecated: Array and string offset access syntax with curly braces is deprecated in /usr/src/myapp/extensions/SemanticMediaWiki/includes/datavalues/SMW_DV_Time.php on line 423
Call Stack:
0.0015 407504 1. {main}() /usr/src/myapp/tests/phpunit/phpunit.php:0
0.0238 671968 2. require('/usr/src/myapp/maintenance/doMaintenance.php') /usr/src/myapp/tests/phpunit/phpunit.php:136
1.0265 15686736 3. PHPUnitMaintClass->execute() /usr/src/myapp/maintenance/doMaintenance.php:99
1.0579 16402872 4. MediaWikiPHPUnitCommand->run() /usr/src/myapp/tests/phpunit/phpunit.php:97
1.0579 16402872 5. MediaWikiPHPUnitCommand->handleArguments() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/TextUI/Command.php:159
1.2818 19023888 6. PHPUnit\Util\Configuration->getTestSuiteConfiguration() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/TextUI/Command.php:837
1.2819 19045728 7. PHPUnit\Util\Configuration->getTestSuite() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Util/Configuration.php:913
1.3625 19102808 8. PHPUnit\Framework\TestSuite->addTestFiles() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Util/Configuration.php:1009
1.9911 25564992 9. PHPUnit\Framework\TestSuite->addTestFile() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Framework/TestSuite.php:403
1.9982 25673880 10. PHPUnit\Framework\TestSuite->addTestSuite() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Framework/TestSuite.php:377
1.9982 25674136 11. PHPUnit\Framework\TestSuite->__construct() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Framework/TestSuite.php:290
2.0057 25806088 12. PHPUnit\Framework\TestSuite->addTestMethod() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Framework/TestSuite.php:187
2.0057 25806464 13. PHPUnit\Framework\TestSuite::createTest() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Framework/TestSuite.php:882
2.0059 25808632 14. PHPUnit\Util\Test::getProvidedData() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Framework/TestSuite.php:481
2.0059 25808744 15. PHPUnit\Util\Test::getDataFromDataProviderAnnotation() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Util/Test.php:449
2.0060 25811456 16. ReflectionMethod->invoke() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Util/Test.php:521
2.0060 25811456 17. SMW\Tests\SemanticDataTest->removePropertyObjectProvider() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/phpunit/phpunit/src/Util/Test.php:521
2.2229 28029512 18. SMW\Tests\SemanticDataTest->newSubobject() /usr/src/myapp/extensions/SemanticMediaWiki/tests/phpunit/includes/SemanticDataTest.php:579
2.2329 28061432 19. SMW\DataValueFactory::getInstance() /usr/src/myapp/extensions/SemanticMediaWiki/tests/phpunit/includes/SemanticDataTest.php:704
2.2427 28142032 20. SMW\Services\ServicesFactory->create() /usr/src/myapp/extensions/SemanticMediaWiki/src/DataValueFactory.php:86
2.2427 28142408 21. Onoi\CallbackContainer\CallbackContainerBuilder->create() /usr/src/myapp/extensions/SemanticMediaWiki/src/Services/ServicesFactory.php:154
2.2427 28142784 22. Onoi\CallbackContainer\CallbackContainerBuilder->getReturnValueFromCallbackHandlerFor() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php:181
2.2428 28142816 23. call_user_func_array:{/usr/src/myapp/extensions/SemanticMediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php:260}() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php:260
2.2428 28142832 24. SMW\Services\SharedServicesContainer->SMW\Services\{closure:/usr/src/myapp/extensions/SemanticMediaWiki/src/Services/SharedServicesContainer.php:506-518}() /usr/src/myapp/extensions/SemanticMediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php:260
2.2459 28159440 25. Onoi\CallbackContainer\CallbackContainerBuilder->registerFromFile() /usr/src/myapp/extensions/SemanticMediaWiki/src/Services/SharedServicesContainer.php:510
2.2483 28196296 26. require('/usr/src/myapp/extensions/SemanticMediaWiki/src/Services/datavalues.php') /usr/src/myapp/extensions/SemanticMediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php:79
2.2702 28490152 27. spl_autoload_call() /usr/src/myapp/extensions/SemanticMediaWiki/src/Services/datavalues.php:342
2.2702 28490192 28. Composer\Autoload\ClassLoader->loadClass() /usr/src/myapp/extensions/SemanticMediaWiki/src/Services/datavalues.php:342
2.2702 28490192 29. Composer\Autoload\includeFile() /usr/src/myapp/vendor/composer/ClassLoader.php:322
Execute the Semantic MediaWiki PHPUnit test suite under PHP 7.4.0RC1.
Thanks for reporting though this will not affect the upcoming SMW 3.1.0 release which will support up to PHP 7.3. Anyways it is good to have this on the radar.
Yeah, I just figured it'd probably have to be handled at some point anyways, so a tracking issue couldn't hurt :)
Step 1: https://github.com/SemanticMediaWiki/SemanticMediaWiki/pull/4298
Funny: last change to that file changed it to PHP 5.4 array syntax.
@mszabo-wikia can you post the full list of warnings?
There are quite a few but I have made 3 PRs to remove the bulk of them (#4295, #4296, #4297). I can try rerunning the tests later today to see what's left.
Thanks a bunch! Merged two of them now.
Just found two cases causing the warning:
Most helpful comment
Yeah, I just figured it'd probably have to be handled at some point anyways, so a tracking issue couldn't hurt :)