我用钩子
public function processDatamap_afterAllOperations(DataHandler &$pObj)
{
}
我想protected mmHistoryRecords
从DataHandler
课堂上阅读。我怎样才能在我的课堂上做到这一点?我的课已经扩展了BackendUtility
我用钩子
public function processDatamap_afterAllOperations(DataHandler &$pObj)
{
}
我想protected mmHistoryRecords
从DataHandler
课堂上阅读。我怎样才能在我的课堂上做到这一点?我的课已经扩展了BackendUtility
您可以使用反射来访问受保护的属性或方法。这使您免于 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 中,没有什么是“私有的”......你需要判断自己是否应该这样做,但这总是有可能的。
除了对 DataHandler 使用 XCLASS 并为此属性添加 getter 方法之外,我没有看到其他选择。
您不能从它所在的类外部访问受保护的属性。这就是受保护(和私有)属性的全部思想。您需要一个 getter 方法,因此您可以向核心开发人员或 xclass 请求一个来DataHandler
自己添加它。
xclass 的问题在于,如果您正在 xclassing 的类发生更改,则在更新 TYPO3 后它可能不再起作用,但是如果您只是为您需要的受保护属性添加 getter,那么这种可能性对于未成年人来说非常小TYPO3 更新。
您可以在此处找到有关 xclass 的更多信息:https ://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Xclasses/Index.html