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

Mon*_*Tea 0 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');
    }
);
Run Code Online (Sandbox Code Playgroud)

我使用这些行将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');
Run Code Online (Sandbox Code Playgroud)

我读到最好使用call_user_func函数,但是他/她没有写出原因.

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

并且:为什么这更好?

特别是对于TYPO3.

谢谢.

Mat*_*ala 6

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

每当你需要一个临时变量时,ext_tables.php或者ext_localconf.php你冒险将这个变量泄漏到你的后面加载的下一个扩展名的同一个文件中.PHP中的闭包作为一个严格的作用域,它可以防止将变量泄漏到闭包中以及将变量泄漏到周围的代码中.

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

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

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

(function() {
    // ...
})();
Run Code Online (Sandbox Code Playgroud)