TYPO3 получить защищенное свойство от DataHandler - PullRequest
0 голосов
/ 13 ноября 2018

Я использую крюк

public function processDatamap_afterAllOperations(DataHandler &$pObj)
{

}

Я хочу прочитать protected mmHistoryRecords из DataHandler класса. Как я могу сделать это в моем классе? Мой класс уже расширяется BackendUtility

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Вы не можете получить доступ к защищенному свойству вне класса, в котором оно находится. В этом и заключается идея защищенных (и частных) свойств.Вам понадобится метод получения, поэтому вы можете либо запросить его у основных разработчиков, либо xclass DataHandler, чтобы добавить его самостоятельно.

Проблема с xclass заключается в том, что он может перестать работать после обновления TYPO3если класс, который вы классифицируете, изменился, но вероятность того, что вы добавляете только геттер для защищенного свойства, который вам нужен, довольно мала для незначительных обновлений TYPO3.

Вы можете найти больше информации о xclass здесь: https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Xclasses/Index.html

0 голосов
/ 13 ноября 2018

Вы можете использовать отражение для доступа к защищенным свойствам или методам.Это избавляет вас от 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 нет ничего «частного» ... Вы должны судить себя, если вы должны это делать, но это всегда возможно.

0 голосов
/ 13 ноября 2018

Я не вижу другого варианта, кроме использования XCLASS для DataHandler и добавления метода получения для этого свойства.

...