0

我用钩子

public function processDatamap_afterAllOperations(DataHandler &$pObj)
{

}

我想protected mmHistoryRecordsDataHandler课堂上阅读。我怎样才能在我的课堂上做到这一点?我的课已经扩展了BackendUtility

4

3 回答 3

2

您可以使用反射来访问受保护的属性或方法。这使您免于 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) {

    }
}

您可以在方法属性上使用它。所以在 PHP 中,没有什么是“私有的”......你需要判断自己是否应该这样做,但这总是有可能的。

于 2018-11-13T14:02:02.737 回答
0

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

于 2018-11-13T09:05:30.107 回答
0

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

xclass 的问题在于,如果您正在 xclassing 的类发生更改,则在更新 TYPO3 后它可能不再起作用,但是如果您只是为您需要的受保护属性添加 getter,那么这种可能性对于未成年人来说非常小TYPO3 更新。

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

于 2018-11-13T09:13:00.873 回答