在(例如)tt_content.php TCA 中使用 call_user_func() 是否更好,为什么? (打字错误3)

Is it better to use call_user_func() in (e.g.) tt_content.php TCA and why? (TYPO3)

我在 ext_tables.php(由 Extension Builder 构建)中找到这些行:

<?php
defined('TYPO3_MODE') || die('Access denied.');

call_user_func(
    function()
    {
        \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('rm_navigation', 'Configuration/TypoScript', 'Navigation');
    }
);

我将 TYPO3 8 的这个迁移到 Configuration/TCA/Overrides/sys_template。php 那些行:

<?php
defined('TYPO3_MODE') || die('Access denied.');

// Extensionregistration
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile('rm_navigation', 'Configuration/TypoScript', 'Navigation');

我读到最好使用 call_user_func 函数,但是 he/she 没有写为什么。

所以:使用 call_user_func 函数更好吗?

并且:为什么这样更好?

尤其是 TYPO3。

谢谢。

这个构造只有一个目的:封装。

每当您需要 ext_tables.phpext_localconf.php 中的临时变量时,您就有可能将此变量泄漏到在您之后加载的下一个扩展的同一文件中。 PHP 中的闭包作为严格范围防止变量泄漏到闭包中以及泄漏变量到周围代码。

原因是所有 ext_tables.phpext_localconf.php 文件都连接到一个文件并存储在缓存中。这对于 TCA 和 TCA 覆盖没有问题,因为它们在构建整个数组后作为整体存储。

所以在 ext_tables.phpext_localconf.php 中你真的应该使用这个结构。

奖励:在 PHP 7.x 和更新版本中可以简化:

(function() {
    // ...
})();