TYPO3 得到 DataHandler 的保护 属性

TYPO3 get protected property from DataHandler

我正在使用挂钩

public function processDatamap_afterAllOperations(DataHandler &$pObj)
{

}

我想阅读 DataHandler Class 中的 protected mmHistoryRecords。 我怎样才能在我的 class 中做到这一点?我的 class 已经扩展 BackendUtility

除了为 DataHandler 使用 XCLASS 并为此 属性 添加 getter 方法之外,我没有看到其他选择。

您无法从 class 所在的外部访问受保护的 属性。这就是受保护(和私有)属性的全部概念。您需要一个 getter 方法,因此您可以向核心开发人员请求一个方法或 xclass DataHandler 自己添加。

xclass 的问题是,如果 class 你正在 xclassing 发生变化,它可能在 TYPO3 更新后不再工作,但是如果你只是为受保护的 属性 添加一个 getter,你需要的对于较小的 TYPO3 更新来说是非常小的。

您可以在此处找到有关 xclass 的更多信息:https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Xclasses/Index.html

您可以使用反射来访问受保护的属性或方法。这使您免于 XCLASSing。

public function processDatamap_afterAllOperations(\TYPO3\CMS\Core\DataHandling\DataHandler $pObj)
{
    try {
        $prop = new \ReflectionProperty(
            \TYPO3\CMS\Core\DataHandling\DataHandler::class, 
            'mmHistoryRecords'
        );
        $prop->setAccessible(true);

        $mmHistoryRecords = $prop->getValue($pObj);
    } catch (\ReflectionException $e) {

    }
}

您可以在 methods and properties 上使用它。 所以在 PHP 什么都不是 "private"... 你需要自己判断是否应该这样做,但这总是有可能的。