Using $this when not in object context

Обновление PHP до последних версий повышает безопасность сайта и сокращает время загрузки страниц Joomla 3, поэтому возьмите update php за правило хорошего тона – это будет отличная профилактика программного геморроя. Следуя советам проктолога, я решил обновить PHP на блоге http://stihirus24.ru/ с версии 7.0 до 7.3.1, но печаль сразу же посетила моё сеошное сердце, ибо увидел я красоту со скрина выше.

Поиск корня ошибки

Далее телодвижения были нервные и хаотичные, так как на блоге Zegeberg, где вы и прибываете сейчас, версия 7.3 стала, как родная. Режим отладки при ошибке Joomla Using $this when not in object context показал следующее:

Call stack
#   Function   Location
1   ()   JROOT/libraries/src/Application/CMSApplication.php:370
2   Joomla\CMS\Application\CMSApplication::getMenu()   JROOT/libraries/src/Application/SiteApplication.php:275
3   Joomla\CMS\Application\SiteApplication::getMenu()   JROOT/components/com_xmap/router.php:96
4   XmapBuildRoute()   JROOT/libraries/src/Component/Router/RouterLegacy.php:69
5   Joomla\CMS\Component\Router\RouterLegacy->build()   JROOT/libraries/src/Router/SiteRouter.php:528
6   Joomla\CMS\Router\SiteRouter->buildSefRoute()   JROOT/libraries/src/Router/SiteRouter.php:498
7   Joomla\CMS\Router\SiteRouter->_buildSefRoute()   JROOT/libraries/src/Router/Router.php:281
8   Joomla\CMS\Router\Router->build()   JROOT/libraries/src/Router/SiteRouter.php:154
9   Joomla\CMS\Router\SiteRouter->build()   JROOT/libraries/src/Router/Route.php:102
10   Joomla\CMS\Router\Route::link()   JROOT/libraries/src/Router/Route.php:52
11   Joomla\CMS\Router\Route::_()   JROOT/modules/mod_menu/helper.php:139
12   ModMenuHelper::getList()   JROOT/modules/mod_menu/mod_menu.php:15
13   include()   JROOT/libraries/src/Helper/ModuleHelper.php:200
14   Joomla\CMS\Helper\ModuleHelper::renderModule()   JROOT/libraries/src/Document/Renderer/Html/ModuleRenderer.php:98
15   Joomla\CMS\Document\Renderer\Html\ModuleRenderer->render()   JROOT/libraries/src/Document/Renderer/Html/ModulesRenderer.php:47
16   Joomla\CMS\Document\Renderer\Html\ModulesRenderer->render()   JROOT/libraries/src/Document/HtmlDocument.php:491
17   Joomla\CMS\Document\HtmlDocument->getBuffer()   JROOT/libraries/src/Document/HtmlDocument.php:783
18   Joomla\CMS\Document\HtmlDocument->_renderTemplate()   JROOT/libraries/src/Document/HtmlDocument.php:557
19   Joomla\CMS\Document\HtmlDocument->render()   JROOT/libraries/src/Application/CMSApplication.php:1044
20   Joomla\CMS\Application\CMSApplication->render()   JROOT/libraries/src/Application/SiteApplication.php:778
21   Joomla\CMS\Application\SiteApplication->render()   JROOT/libraries/src/Application/CMSApplication.php:202
22   Joomla\CMS\Application\CMSApplication->execute()   JROOT/index.php:49.

Отчего мозг начал кипеть и выделять ядовитые газы. Советы, консультации, взятки и угрозы позволили выяснить, что гадит на жизнь с высоты птичьего полёта компонент com_xmap, который не испытывает никаких добрых чувств к PHP 7.3. Убирать его не позволила дружбы с детства и верность суровым традициям, поэтому пришлось стать на 5 минут сеошником-хирургом.

Отправляем Using $this when not in object context на кладбище

замена getMenu()? 

Практика хирургии показала, что эпицентр болезни зарыт в 96 строке файла роутер карты сайта:

/components/com_xmap/router.php;

Здесь требуется для полного и долгого счастья просто заменить в 96 строке:

getMenu()? 

На:

$menu = JFactory::getApplication()->getMenu();

После этого Joomla 3.9.5 стала работать на PHP 7.3.1 как родная, они слились в единое целое, чем и сделали мне настроение.

Вывод прост – не ищите сложных ответов на простые вопросы, а чаще посещайте блог Zegeberg, слушайте Б.Г., не верьте девушкам со стильными стрижками) и читайте древнегреческих философов.