在(例如)tt_content.php TCA中使用call_user_func()更好吗?为什么? (TYPO3)

时间:2018-03-27 13:39:42

标签: typo3 registration

我在我的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函数,但是他/她没有写出原因。

那么:使用call_user_func函数会更好吗?

而且:为什么这样更好?

特别是对于TYPO3。

感谢。

1 个答案:

答案 0 :(得分:6)

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

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

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

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

奖励:在PHP 7.x及更高版本中,这可以简化:

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