Использовать «использовать» в ext_localconf. php в TYPO3? (Неустранимая ошибка: невозможно использовать ... как ..., поскольку имя уже используется в) - PullRequest
2 голосов
/ 19 февраля 2020

У меня только что была ошибка из-за этого:

Fatal error: Cannot use TYPO3\CMS\Core\Utility\GeneralUtility
as GeneralUtility because the name is already in use
in /var/www/mysite/public/typo3temp/var/cache/code/cache_core/ext_localconf_feb178af00fe22e00dc62d7dcd6d4d16f5d4fc3a.php
on line 4508

В строке, которая нарушает работу:

use TYPO3\CMS\Core\Utility\GeneralUtility;

Очевидно, некоторые расширения используют "use" в ext_localconf.php в моей системе , Поскольку все это объединено в один файл в кэше, это может привести к многократному использованию операторов.

Есть ли еще способ использовать «use», не вызывая этих ошибок? Каков рекомендуемый способ?

Я проверил документы:

Вы никогда не должны использовать оператор использования в глобальной области действия файлов - это может нарушить концепцию кэшированного сценария и привести к конфликту. с другими расширениями.

https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ExtensionArchitecture/ConfigurationFiles/Index.html

Использование «использования» в рекомендуемой функции закрытия, например:

(function () {
    // Add your code here
    use TYPO3\CMS\Core\Utility\GeneralUtility;
    // ...
})();

результаты в синтаксической ошибке на моей системе.

Что рекомендуют эксперты?


кстати. В этой области есть множественные некоторые расширения, которые имеют операторы использования в глобальной области видимости ext_localconf. php. Если я не ошибаюсь, это может сильно сломаться.

1 Ответ

7 голосов
/ 19 февраля 2020

use используется для импорта / псевдонимов пространств имен в PHP, может использоваться только в глобальной области, но не в области блока. См. https://www.php.net/manual/en/language.namespaces.importing.php#language .namespaces.importing.scope . Так что вам вообще не следует использовать use в ext_localconf.php, а вместо этого просто использовать полные пространства имен.

Если есть расширения, использующие use в ext_localconf.php, вы должны разрешить сопровождающим этого расширения знаю, что это неправильно и может (и будет) вызывать фатальные ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...