0

我在 TYPO3 4.5 中看到了一些扩展文件。( class.tx_ajaxsearch_pi1.php...),看起来像这样:

class tx_ajaxsearch_pi1 extends tslib_pibase {
...
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']) {
    include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']);
}

我正在检查这份文件XCLASShttp ://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/3/8/

问题:

  1. 根据这份文件:http ://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/3/8/

    扩展 TYPO3s PHP 类主要是为了满足个别项目的特殊需求。这是由于一个类只能扩展一次的限制。因此,如果许多扩展试图扩展同一个类,则只有其中一个会成功,而其他扩展将无法正常运行。

但是为什么类tslib_pibase可以被不同的扩展类多次扩展呢?

  1. 在每个扩展脚本中放置以下代码是一个好习惯吗?以防万一将来需要扩展扩展类?
    if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']) {
            include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/ajax_search/pi1/class.tx_ajaxsearch_pi1.php']);
4

1 回答 1

3

XCLASS'ing 是一种方法,当有人用另一个类替换一个类时。听起来像是 OOP 中的继承,但实际上它是不同的,因为您只能XCLASS 一次,因为在 TYPO3 全局范围内,一个类定义被另一个类定义替换。

所以,即你 XCLASS t3lib_db 与 ux_t3lib_db - 这意味着,taht t3lib_db 将永远不会用于数据库处理,但 ux_t3lib_db

ux_t3lib_db extends t3lib_db当然,您的XCLASS可以扩展基类,如ux_t3lib_db。因此,唯一的赢家将是第一个获得 XCLASS 的人。

你可以在这里阅读更多。

但是,一般注意是,XCLASS'ing 是您应该尝试的最后一个选项。使用钩子信号/槽(最后只在 ExtBase 中有效)。

回答您的第二个问题,我可以说,是的,您可以在 4.5 中执行此操作,但不,您不应该从 6.0 执行此操作。

于 2013-08-21T08:10:41.207 回答